Linux āĻāĻŦāĻ macOS-āĻ C āĻāĻŦāĻ C++ āĻāĻžāĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ PVS-Studio āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ, āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 7.04 āĻĨā§āĻā§ āĻļā§āĻ°ā§ āĻāĻ°ā§, āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻ¨āĻ¤ā§āĻ¨ āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻŽāĻŋāĻ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻā§āĻ˛āĻŋ āĻāĻžāĻ¨āĻ¤ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦā§ āĻāĻŋāĻāĻžāĻŦā§ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ, āĻŦāĻžāĻĄāĻŋ āĻāĻŦāĻ āĻ
ā§āĻ¯āĻžāĻĒāĻāĻŋāĻ¯āĻŧāĻžāĻ°ā§āĻ° āĻŽāĻ¤ā§ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻ¸āĻŋāĻāĻ (āĻāĻ¨ā§āĻāĻŋāĻ¨āĻŋāĻāĻ¯āĻŧāĻžāĻ¸ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨) āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻāĻāĻāĻŋ āĻāĻŋāĻāĻšāĻžāĻŦ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧāĨ¤
āĻĢāĻžāĻāĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻā§āĻ āĻŽā§āĻĄ
Linux āĻāĻŦāĻ macOS-āĻāĻ° āĻāĻ¨ā§āĻ¯ PVS-Studio 7.04 āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§, āĻā§āĻ¸ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŽā§āĻĄ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻāĻŋ āĻāĻŽāĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ āĻāĻ°ā§ āĻ¯āĻžāĻ° āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ
āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻĢāĻžāĻāĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻā§āĻāĻŋāĻ āĻŽā§āĻĄāĻāĻŋ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻ˛āĻā§āĻā§āĻ° āĻ¸ā§āĻā§āĻ°ā§āĻ¸ āĻā§āĻ°ā§āĻ¸ āĻ˛āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻ¸āĻžāĻĨā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ (pvs-studio-analyzer trace)āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻžāĻ¤ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¸āĻāĻāĻ˛āĻ¨ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°ā§āĨ¤
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋāĻ° āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§ - āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻĒāĻ¨āĻŋ āĻ¯āĻāĻ¨āĻ āĻāĻāĻŋ āĻāĻžāĻ˛āĻžāĻŦā§āĻ¨ āĻ¤āĻāĻ¨ āĻāĻĒāĻ¨āĻžāĻā§ āĻšāĻ¯āĻŧ āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦāĻŋāĻ˛ā§āĻĄ āĻā§āĻ°ā§āĻ¸ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¯āĻž āĻ¨āĻŋāĻā§āĻ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻ° āĻŦāĻŋāĻ°ā§āĻ§āĻŋāĻ¤āĻž āĻāĻ°ā§āĨ¤ āĻ āĻĨāĻŦāĻž, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻā§āĻ°ā§āĻ¸ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¨āĻŋāĻā§āĻ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ°āĻžāĻ¨āĻā§āĻ˛āĻŋ āĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻĻāĻŋ āĻā§āĻ°ā§āĻ¸ā§āĻ° āĻĒāĻ°ā§ āĻ¸ā§āĻ°ā§āĻ¸ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž āĻāĻžāĻ āĻžāĻŽā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻ¤ā§āĻ¸ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ #include āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ)āĨ¤
āĻ
āĻ¤āĻāĻŦ, āĻāĻŽāĻ°āĻž āĻāĻŽāĻŋāĻ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻŦāĻž āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻā§āĻ˛āĻŋ āĻāĻžāĻ¨āĻ¤ā§ āĻā§āĻ°ā§āĻ¸ āĻ˛āĻ āĻ¸āĻš āĻĢāĻžāĻāĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻā§āĻ āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ āĻ¨āĻžāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻāĻŽāĻŋāĻ āĻā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻĨāĻž āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¤ā§āĻ¸ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻāĻāĻāĻŋ āĻĒāĻžāĻ ā§āĻ¯ āĻĢāĻžāĻāĻ˛ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻāĻžāĻā§ āĻĒā§āĻ°ā§āĻ°āĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
āĻāĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻĒā§āĻā§āĻˇāĻŋāĻ āĻŦāĻž āĻĒāĻ°āĻŽ āĻĒāĻžāĻĨ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻžāĻāĻ˛ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ˛āĻžāĻāĻ¨ā§ āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¨āĻžāĻŽāĻ āĻ¨āĻ¯āĻŧ, āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĒāĻžāĻ ā§āĻ¯āĻ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻā§āĻ°āĻšāĻŖāĻ¯ā§āĻā§āĻ¯āĨ¤ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§ āĻ¯ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ āĻ˛āĻžāĻāĻ¨āĻāĻŋāĻā§ āĻāĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻŦā§āĨ¤ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻĨāĻžāĻāĻ˛ā§ āĻāĻāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ CI-āĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻŦāĻž āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĨā§āĻā§ āĻĢāĻžāĻāĻ˛ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻāĻ¨, āĻāĻ āĻŽā§āĻĄāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻŽā§āĻ˛ āĻŦāĻŋāĻāĻžāĻļ āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻŦā§āĻļā§āĻ° āĻāĻā§ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻĄāĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨āĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻ¸āĻžāĻĄāĻŧāĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§, āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĒā§āĻ˛āĻžāĻ-āĻāĻ¨āĻāĻžāĻ°ā§āĻāĻžāĻ° āĻĒāĻ¤āĻžāĻāĻž āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ --āĻāĻā§āĻāĻŋāĻ¤-āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
āĻāĻ āĻĒāĻ¤āĻžāĻāĻžāĻ° āĻ¸āĻžāĻĨā§, āĻāĻ¨āĻāĻžāĻ°ā§āĻāĻžāĻ°āĻāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻ¨-āĻāĻŋāĻ°ā§ āĻā§āĻĄ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§ āĻ¯āĻĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ°āĻŋāĻĒā§āĻ°ā§āĻā§ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻĨāĻžāĻā§āĨ¤ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻŋ-āĻāĻŽāĻŋāĻ āĻšā§āĻ, āĻāĻŽāĻŋāĻ āĻŦāĻž āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻŦā§āĻ˛āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻā§āĻ¨āĻžāĻ°ā§āĻ āĻāĻ°āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻāĻŽā§āĻ˛ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨, āĻāĻžāĻ āĻāĻ°āĻž āĻŦāĻž āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻŦāĻŋāĻāĻĻā§āĻ°āĻ. āĻāĻĒāĻ¨āĻŋ āĻ¯āĻāĻ¨ āĻĒā§āĻ°āĻĨāĻŽ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨, āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻŦā§, āĻāĻžāĻ°āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻāĻā§ āĻšā§āĻĄāĻžāĻ° āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻāĻ¤ā§āĻ¸ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ C āĻāĻŦāĻ C++ āĻĢāĻžāĻāĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĨ¤ āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§, āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤ āĻāĻ¨āĻā§āĻ°āĻŋāĻŽā§āĻ¨ā§āĻāĻžāĻ˛ āĻ ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻžāĻāĻ¸āĻŋāĻ¸ āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĢāĻžāĻāĻ˛ āĻ˛āĻŋāĻ¸ā§āĻ āĻā§āĻāĻŋāĻ āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŽāĻŋāĻ āĻā§āĻ āĻāĻ°āĻžāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§āĻ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻŦāĻ¸ā§āĻ¤ā§ āĻĢāĻžāĻāĻ˛ āĻ¨āĻ¯āĻŧāĨ¤
āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¨ā§āĻ¤āĻŋ
āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻ āĻ¨ā§āĻ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻā§, āĻ¤āĻžāĻ āĻāĻāĻŋāĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ āĻāĻļ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻŦā§āĻ§āĻāĻŽā§āĻ¯āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻŦāĻžāĻāĻŋ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻĨā§āĻā§ āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻāĻ˛āĻžāĻĻāĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻ¸ā§āĻ¨ āĻĻā§āĻāĻŋ āĻļāĻžāĻāĻž āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻŽāĻŋāĻ āĻāĻžāĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻāĻŋ:
āĻāĻ° āĻ¯ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻž āĻ¯āĻžāĻ A1 āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¯ā§ āĻā§āĻĄ āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻŦāĻĄāĻŧ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻ°āĻ¯āĻŧā§āĻā§. āĻāĻāĻā§ āĻāĻā§ āĻāĻŽāĻ°āĻž āĻāĻŽāĻŋāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻļāĻžāĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋ A1 āĻāĻŦāĻ āĻāĻŋāĻā§ āĻĢāĻžāĻāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨.
āĻāĻĒāĻ¨āĻŋ, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻĒāĻ°ā§ āĻāĻāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻā§āĻ¨ A1 āĻāĻ°āĻ āĻĻā§āĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻāĻā§āĻā§, āĻ¤āĻŦā§ āĻāĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻā§āĻā§āĻ¤āĻāĻ°āĻŖāĻ āĻāĻŋāĻ˛, āĻāĻžāĻ°āĻŖ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻŦāĻĻā§āĻ§ āĻ¨āĻ āĻŽāĻžāĻ˛āĻŋāĻ. āĻāĻ° āĻāĻāĻ¨ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸ā§āĻā§ āĻ¯āĻāĻ¨ hotfix āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤. āĻāĻ āĻāĻžāĻ°āĻŖā§āĻ āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻ¨ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ B3 и A3.
āĻ āĻŦāĻļā§āĻ¯āĻ, āĻ¤āĻžāĻĻā§āĻ° āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻšāĻŦā§, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻā§āĻŦ āĻ¸āĻŽāĻ¯āĻŧāĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻāĻŦāĻ āĻ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ āĻšāĻŦā§, āĻāĻžāĻ°āĻŖ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻž āĻāĻ°āĻ āĻĻāĻā§āĻˇāĨ¤
āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻļāĻžāĻāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĒāĻžāĻ, āĻ¯ā§ āĻļāĻžāĻāĻž āĻĨā§āĻā§ āĻāĻŽāĻ°āĻž āĻŽāĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¤ā§ āĻāĻžāĻ āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĨāĻžāĻāĻž:
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
$MERGE_BASE āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§ āĻāĻāĻŋ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻāĻžāĻŦā§ āĻĻā§āĻāĻŦāĨ¤ āĻāĻ¸āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻš'āĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻŋāĻāĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĄā§āĻāĻžāĻŦā§āĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°ā§ āĻ¨āĻž, āĻ¤āĻžāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ āĻĄā§āĻāĻž āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¨āĻ¤ā§āĻ¨ āĻāĻĒāĻžāĻ¯āĻŧ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ¸āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻāĻ¯āĻŧā§āĻŦ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¨ā§āĻā§ āĻŦāĻŋāĻļāĻĻāĻāĻžāĻŦā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĒā§āĻ¯āĻŧā§āĻāĻŋ, āĻŦāĻž āĻŦāĻ°āĻ, āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¨āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĨ¤ āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻĻāĻŋāĻ¤ā§ āĻšāĻŦā§ .pvs-pr.list (āĻāĻŽāĻ°āĻž āĻāĻĒāĻ°ā§āĻ° āĻāĻāĻāĻĒā§āĻāĻāĻŋ āĻāĻāĻŋāĻ¤ā§ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻāĻ°ā§āĻāĻŋ) āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻāĻžāĻā§:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻĒāĻ°, āĻāĻŽāĻžāĻĻā§āĻ° āĻ˛āĻ āĻĢāĻžāĻāĻ˛āĻāĻŋāĻā§ (PVS-Studio.log) āĻāĻāĻāĻŋ āĻ¸āĻšāĻ-āĻĒāĻ āĻ¨ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
plog-converter -t errorfile PVS-Studio.log --cerr -w
āĻāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻā§āĻā§āĻ¤ āĻāĻ°āĻŦā§
āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻŦāĻ˛ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¨āĻž, āĻ¤āĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§ āĻ āĻŦāĻšāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§, āĻāĻ¨āĻāĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻĒāĻ¤āĻžāĻāĻž āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ -W (--āĻāĻā§āĻāĻŋāĻ¤-āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž) āĻ¯āĻĻāĻŋ āĻāĻŽāĻĒāĻā§āĻˇā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻĨāĻžāĻā§, āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻā§āĻĄ āĻĒā§āĻ˛āĻžāĻ-āĻāĻ¨āĻāĻžāĻ°ā§āĻāĻžāĻ° 2 āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻŦā§, āĻ¯āĻž CI āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§ āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ āĻŦāĻšāĻŋāĻ¤ āĻāĻ°āĻŦā§āĨ¤
āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ
āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧ .travis.yml. āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻĢāĻžāĻāĻ˛ āĻĨā§āĻā§ āĻāĻ˛ āĻāĻ°āĻž āĻĢāĻžāĻāĻļāĻ¨ āĻ¸āĻš āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ°āĻžāĻāĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻā§āĻāĻŋ .travis.yml (bash script_name.sh function_name).
āĻāĻŽāĻ°āĻž āĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻā§āĻĄ āĻ¯ā§āĻ āĻāĻ°āĻŦ āĻ¸āĻā§āĻ°ā§ āĻāĻāĻžāĻ¤, āĻāĻāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻ°āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻĒāĻžāĻŦāĨ¤ āĻŦāĻŋāĻāĻžāĻā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ¸ā§āĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ˛āĻŋāĻāĻŋ:
install:
- bash .travis.sh travis_install
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻā§āĻ¨ā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻ¨āĻž āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻšāĻžāĻāĻĢā§āĻ¨āĻā§āĻ˛āĻŋ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ā§ˇ
āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻāĻĒā§āĻ¨ āĻāĻ°āĻž āĻ¯āĻžāĻ .travis.sh āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ¸ā§āĻāĻŋāĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ travis_install():
travis_install() {
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
}
āĻāĻāĻ¨ āĻŦāĻŋāĻāĻžāĻā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻ˛āĻŋāĻĒāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻžāĻ˛āĻžāĻ¨:
script:
- bash .travis.sh travis_script
āĻāĻŦāĻ āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§:
travis_script() {
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
git diff --name-only origin/HEAD > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
--disableLicenseExpirationCheck
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
}
āĻāĻ āĻā§āĻĄāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻĻāĻ°āĻāĻžāĻ°, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŋāĻŽā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āĻĨāĻžāĻā§:
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
}
āĻāĻāĻŋ āĻāĻ āĻŽāĻ¤ āĻāĻžāĻ˛ā§ āĻšāĻŦā§:
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
git diff --name-only origin/HEAD > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
--disableLicenseExpirationCheck
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
}
āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻā§āĻ¨ $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ¸ā§āĻŦāĻžāĻ§ā§āĻ¨āĻāĻžāĻŦā§ āĻā§āĻˇāĻŖāĻž āĻāĻ°ā§:
- $TRAVIS_PULL_REQUEST āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻ¨āĻŽā§āĻŦāĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§ āĻŦāĻž āĻŽāĻŋāĻĨā§āĻ¯āĻž, āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻļāĻžāĻāĻž āĻšāĻ¯āĻŧ;
- $TRAVIS_REPO_SLUG āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻ¨āĻžāĻŽ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§āĨ¤
āĻāĻ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ:
āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻā§āĻĄāĻā§āĻ˛āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻžāĻ¨āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻžāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋāĻā§ āĻāĻŽāĻŋāĻāĻāĻŋāĻā§ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ¯ā§āĻā§āĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻŦāĻ˛āĻŦā§āĨ¤
āĻāĻāĻ¨ āĻā§āĻĄā§āĻ° āĻāĻ āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻāĻ¨āĻŋāĻˇā§āĻ āĻāĻžāĻŦā§ āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ:
git diff --name-only origin/HEAD > .pvs-pr.list
āĻāĻ¸āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻšāĻ˛ āĻ¯ā§ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻāĻāĻāĻŋ āĻāĻžāĻ¨ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°ā§:
āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŋ A4, āĻāĻŦāĻ āĻ¨āĻž B3->A3. āĻāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§āĻ° āĻāĻžāĻ°āĻŖā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯āĻāĻŋ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ Đ3, āĻ¯āĻž āĻ
āĻŦāĻŋāĻāĻ˛ āĻĨā§āĻā§ āĻļāĻžāĻāĻžāĻ° āĻļā§āĻ°ā§āĻˇā§ āĻāĻ¤ā§āĻ¸.
āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻŦāĻŋāĻļāĻĻ āĻŦāĻžāĻāĻŋ āĻāĻā§ - āĻ¸āĻāĻāĻ˛āĻŋāĻ¤ āĻ āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻāĻ¨āĻŋāĻā§ āĻšā§āĻĄāĻžāĻ° āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž āĻā§āĻ¯āĻžāĻļ āĻāĻ°āĻž (*.c, *.cc, *.cpp, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)āĨ¤ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻžāĻā§āĻ˛āĻŋ āĻāĻŖāĻ¨āĻž āĻāĻ°ā§ āĻ¯āĻāĻ¨ āĻāĻāĻŋ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻŽā§āĻĄā§ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻžāĻ˛ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ .PVS-Studio āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§ā§ˇ Travis CI āĻāĻĒāĻ¨āĻžāĻā§ āĻĢā§āĻ˛ā§āĻĄāĻžāĻ° āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻĄā§āĻāĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŦ .āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ/:
cache:
directories:
- .PVS-Studio/
āĻāĻ āĻā§āĻĄ āĻĢāĻžāĻāĻ˛ āĻ¯ā§āĻ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ .travis.yml. āĻāĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻĒāĻ°ā§ āĻ¸āĻāĻā§āĻšā§āĻ¤ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĄā§āĻāĻž āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°ā§, āĻ¯āĻž āĻĢāĻžāĻāĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻŦāĻž āĻā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ°āĻžāĻ¨āĻā§āĻ˛āĻŋāĻā§ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻ¤ā§āĻŦāĻ°āĻžāĻ¨ā§āĻŦāĻŋāĻ¤ āĻāĻ°āĻŦā§āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻāĻ°āĻž āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ¸āĻ˛ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŦā§āĨ¤
āĻĻā§āĻ¸ā§āĻ¤
āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻāĻ° āĻŽāĻ¤,
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ˛āĻžāĻāĻ¨ā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
āĻāĻ¸ā§āĻ¨ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ°āĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŋ āĻ¯āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¤ā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻĄāĻāĻžāĻ° āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ°āĻāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŋāĻ¸āĻŋāĻ¸āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻ§āĻžāĻ°āĻ āĻ°āĻ¯āĻŧā§āĻā§:
āĻāĻāĻ¨ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻ¯āĻžāĻ:
āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ˛āĻžāĻāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ:
apt-get update && apt-get -y install wget gnupg jq
wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
apt-get update && apt-get -y install pvs-studio
āĻāĻāĻ¨ āĻāĻ˛ā§āĻ¨ āĻ°āĻžāĻ¨ āĻā§āĻ¯āĻžāĻŦā§ (āĻĒā§āĻ°āĻĨāĻŽ āĻāĻāĻāĻ¨) āĻ¯āĻžāĻ¨ āĻāĻŦāĻ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻā§āĻĄ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨:
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ Travs-CI āĻāĻ° āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻĒāĻĄāĻŧā§āĻ¨, āĻ¤āĻŦā§ āĻāĻ āĻā§āĻĄāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤, āĻ¤āĻŦā§, āĻāĻāĻ¨ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§āĻā§:
āĻāĻ¸āĻ˛ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻš'āĻ˛ āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŋ āĻ¨āĻž, āĻ¤āĻŦā§ āĻ¯ā§ āĻļāĻžāĻāĻž āĻĨā§āĻā§ āĻāĻžāĻ¨ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨āĻā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŋ:
āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§āĻā§āĻˇā§ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻŦāĻĻā§āĻ§ B3 āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĨā§āĻā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĒā§āĻ¤ā§ āĻšāĻŦā§ A3:
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻž A3 āĻāĻ¸ā§āĻ¨ GitHub API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ:
https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}
āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋ āĻ¯āĻž āĻŦāĻžāĻĄāĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§:
- $BUDDY_EXECUTION_PULL_REQEUST_NO - āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻ¨āĻŽā§āĻŦāĻ° āĻāĻžāĻ¨;
- $BUDDY_REPO_SLUG â āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻ¸āĻāĻŽāĻŋāĻļā§āĻ°āĻŖ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻ¸āĻ°ā§āĻŦā§āĻā§āĻ/āĻĒāĻ°ā§āĻā§āĻˇāĻž)āĨ¤
āĻāĻāĻ¨ āĻāĻ¸ā§āĻ¨ āĻ¨ā§āĻā§āĻ° āĻŦā§āĻ¤āĻžāĻŽāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻŋ:
Travis CI āĻāĻ° āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻ .pvs-studio āĻā§āĻ¯āĻžāĻļāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯, āĻ¯ā§āĻšā§āĻ¤ā§ āĻŦāĻžāĻĄāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ˛āĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻ˛ āĻā§āĻ¯āĻžāĻļ āĻāĻ°ā§āĨ¤ āĻ
āĻ¤āĻāĻŦ, āĻļā§āĻˇ āĻāĻŋāĻ¨āĻŋāĻ¸āĻāĻŋ āĻŦāĻžāĻŽā§ PVS-Studio-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ˛āĻāĻāĻ¨ āĻāĻŦāĻ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŦāĻžāĻ° āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§ āĻ¨āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻšāĻŦā§āĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ˛āĻāĻāĻ¨ āĻāĻŦāĻ āĻā§ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
āĻāĻ° āĻĒāĻ°ā§, āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ˛ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻŦāĻž āĻāĻŽāĻŋāĻā§āĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻžāĻāĻŋāĻā§ āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻāĻ°āĻŦā§āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻ¤ā§ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĨāĻžāĻā§, āĻŦāĻžāĻĄāĻŋ āĻāĻāĻŋ āĻĒā§āĻ˛ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŦā§āĨ¤
AppVeyor
AppVeyor āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻŦāĻžāĻĄāĻŋāĻ° āĻŽāĻ¤āĻ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻ¯āĻŧā§āĻŦ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻāĻā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻāĻāĻāĻŋ *.yml āĻĢāĻžāĻāĻ˛ āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻāĨ¤
āĻĒā§āĻ°āĻā§āĻā§āĻ āĻāĻāĻžāĻ°āĻāĻŋāĻāĻ¤ā§ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻā§āĻ¯āĻžāĻŦā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ:
āĻāĻ¸ā§āĻ¨ āĻāĻ āĻĒā§āĻˇā§āĻ āĻžāĻāĻŋ āĻ¨ā§āĻā§ āĻ¸ā§āĻā§āĻ°ā§āĻ˛ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĒā§āĻ˛ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻ¸āĻāĻā§āĻ°āĻšā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¯āĻžāĻļā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻŋ:
āĻāĻāĻ¨ āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ¯āĻžāĻŦā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽā§āĻ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻŋ:
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻŦāĻŋāĻāĻžāĻāĻā§āĻ˛āĻŋ āĻĒāĻĄāĻŧā§ āĻĨāĻžāĻā§āĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻĻā§āĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻŦ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ - PVS_KEY и PVS_USERNAME. āĻ¯āĻĻāĻŋ āĻ¤āĻž āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŽāĻ¨ā§ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ āĻ¯ā§ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻ¯āĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§ āĻŦāĻžāĻļ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻŦāĻžāĻ° āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦāĨ¤
āĻ¨ā§āĻā§āĻ° āĻāĻāĻ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻāĻŽāĻ°āĻž āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢā§āĻ˛ā§āĻĄāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŋ:
āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻ¨āĻž āĻāĻ°āĻŋ, āĻāĻŽāĻ°āĻž āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŦ, āĻ¤āĻŦā§ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻĨā§āĻā§ āĻāĻāĻāĻĒā§āĻ āĻĒāĻžāĻŦāĨ¤ āĻ
āĻ¤āĻāĻŦ, āĻ¸āĻ āĻŋāĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ° āĻ¨āĻžāĻŽ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤ āĻā§āĻ¸ā§āĻ āĻā§āĻ¯āĻžāĻŦ āĻā§āĻ˛ā§āĻ¨ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨:
āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ āĻĢāĻ°ā§āĻŽāĻāĻŋāĻ¤ā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻā§āĻĄāĻāĻŋ āĻĒā§āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
sudo apt-get update && sudo apt-get -y install jq
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update && sudo apt-get -y install pvs-studio
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
--dump-files --dump-log pvs-dump.log
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
āĻāĻ¸ā§āĻ¨ āĻā§āĻĄā§āĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ āĻāĻļā§ āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻŋāĻ¨:
PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
--dump-files --dump-log pvs-dump.log
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
āĻāĻ āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻŽāĻžāĻ¨ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ pwd āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻŽāĻžāĻ¨ā§āĻ° āĻŦāĻ°āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ ā§āĻ¯āĻžāĻ¸āĻžāĻāĻ¨āĻŽā§āĻ¨ā§āĻ āĻĒā§āĻ°āĻĨāĻŽ āĻ¨āĻāĻ°ā§ āĻ āĻĻā§āĻā§āĻ¤ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§, āĻāĻŽāĻŋ āĻāĻāĻ¨ āĻ¸āĻŦāĻāĻŋāĻā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻŦāĨ¤
AppVeyor āĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ āĻĻā§āĻā§āĻ¤ āĻāĻāĻ°āĻŖā§āĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽāĨ¤ āĻāĻāĻĻāĻŋāĻā§, āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§āĻā§, āĻ¤āĻŦā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤ āĻāĻŽāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻāĻŋ āĻ¯ā§ āĻāĻŽāĻ°āĻž /home/appveyor/projects/testcalc/ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻāĻāĻŋ, āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻ¯ā§ āĻāĻŽāĻ°āĻž /opt/appveyor/build-agent/-āĻ āĻāĻāĻŋāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻŋ āĻŦā§āĻāĻ¤ā§ āĻĒā§āĻ°ā§āĻāĻŋāĻ˛āĻžāĻŽ āĻ¯ā§ $PWD āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻāĻŋ āĻāĻāĻā§ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻāĻŋāĻ˛āĨ¤ āĻāĻ āĻāĻžāĻ°āĻŖā§, āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻā§ āĻāĻŽāĻŋ āĻ¨āĻŋāĻā§ āĻāĻ° āĻŽāĻžāĻ¨ āĻāĻĒāĻĄā§āĻ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻā§āĻ° āĻŽāĻ¤ā§:
āĻāĻāĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŖā§āĻĄāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨:
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
āĻāĻāĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĒāĻžāĻ āĻ¯āĻžāĻ° āĻāĻĒāĻ° āĻāĻžāĻ¨ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻā§āĻˇāĻŖāĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨:
- $APPVEYOR_PULL_REQUEST_NUMBER â āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻ¨āĻŽā§āĻŦāĻ° āĻāĻžāĻ¨ā§āĻ¨;
- $APPVEYOR_REPO_NAME - āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻŽāĻ°āĻž āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŋāĻ¨āĻŋ, āĻ¤āĻŦā§, āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻāĻ˛ā§āĻ° āĻāĻā§ āĻ āĻĒāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻā§āĻ¯āĻžāĻļāĻŋāĻ āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¯āĻŧā§, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ¤āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ "āĻŦāĻžāĻāĻ¸āĻžāĻāĻā§āĻ˛" āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§, āĻ¤āĻžāĻ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻ˛āĻžāĻĻāĻž āĻšāĻ¯āĻŧāĨ¤
āĻā§āĻĨāĻžāĻ, āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸-āĻ¸āĻŋāĻāĻ-āĻ¤ā§, āĻā§āĻĄā§āĻ° āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ˛āĻžāĻāĻ¨ āĻāĻŦāĻ āĻā§āĻ¯āĻžāĻļāĻŋāĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻšā§āĻ¨āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§; āĻā§āĻĨāĻžāĻ, āĻ ā§āĻ¯āĻžāĻĒāĻāĻŋāĻ¯āĻŧāĻžāĻ°ā§āĻ° āĻŽāĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸ā§āĻāĻŋāĻāĻ¸ā§ āĻĢā§āĻ˛ā§āĻĄāĻžāĻ°āĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§; āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻĨāĻžāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻ¨āĻ¨ā§āĻ¯ āĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻā§ āĻŦā§āĻāĻžāĻ¨ā§āĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻžāĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻā§āĻ¯āĻžāĻļā§ āĻāĻ°āĻž āĻāĻŖā§āĻĄāĻāĻŋ āĻāĻāĻžāĻ°āĻ°āĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻĻā§āĻ¨āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ¤ā§ āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¯āĻž āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ, āĻ¤āĻžāĻšāĻ˛ā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ¯āĻžāĻļāĻŋāĻāĻ¯āĻŧā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻŦā§ āĻ¨āĻžāĨ¤
āĻāĻĒāĻ¨āĻžāĻ° āĻŽāĻ¨ā§āĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŋāĻā§ āĻāĻžāĻ āĻ¨āĻž āĻāĻ°ā§ āĻ¤āĻŦā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻŦāĻŋāĻ§āĻžāĻ¯āĻŧ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻ˛āĻŋāĻā§āĻ¨
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻāĻ°ā§āĻā§-āĻāĻžāĻˇā§ āĻļā§āĻ°ā§āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻ
āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻ˛āĻŋāĻā§āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨: āĻŽā§āĻ¯āĻžāĻā§āĻ¸āĻŋāĻŽ āĻāĻžāĻā§āĻ¯āĻžāĻāĻŋāĻ¨ā§āĻāĻ¸ā§āĻāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com