In PVS-Studio analystoris pro C et C++ linguarum in Linux et macOS, inde a versione 7.04 incipiens, optio probata apparuit indicem certarum imaginum reprimendum. Novo modo utens, analystorem configurare potes ad reprimenda mandata et petitiones collige. Hic articulus indicabit tibi quomodo inspicias indicem tabularum mutatarum imaginum GitHub in tam populari CI (Integratione continua) systemata Travis CI, Buddy et AppVeyor.
File album reprehendo modus
In versione PVS-Studio 7.04 pro Linux et macOS, modus inveniendi indicem fasciculorum fontium apparuit. Hoc operatur in inceptis quorum ratio aedificandi tibi tabellam generandi permittit
Item, tabulae indici modus iniectae adhiberi potest una cum graphio vestigiorum stipes compilatoris immissae (pvs-studio-analyzer vestigium). Ad hoc faciendum, necesse est ut prius plenam operis incepti et indagare eam perficias ut analysris notitias integras de parametris compilationum omnium imaginum repressas colligat.
Nihilominus haec optio magnum detrimentum habet - aut opus erit ad plenum faciendum vestigium totius consilii totius temporis, quo curris eam, quae in se contradicit ideae cito inhibitionis committi. Vel, si vestigium ipsum resultat, sequens analystoris currit imperfectum esse potest si dependens structura fontis imaginum post vestigium mutat (exempli gratia, nova #include uni e fontis imagini additur).
Propterea non commendamus utendo indicem electronicarum perscriptio modum cum tigillo vestigio ad reprimendam committit vel petitiones trahere. In casu facere potes incremental constructum cum iniecta committit, considera utendi modum
Elenchus fontium analysi in analysi servatur in fasciculo textu et ad analystorem parametri utens -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
Hic fasciculus significat semitas relativas vel absolutas ad lima, et quaelibet fasciculus novus in linea nova esse debet. Acceptum est non solum nomina fasciculorum analysin denotare, sed etiam textum variis. Analystor videbit hanc limam non esse et lineam ignorare. Hoc utile esse potest ad explicandum si lima manually specificata sint. Attamen persaepe in analysi in CI analyseos index generabitur, exempli gratia, haec fasciculi ex petitione committi vel trahere possunt.
Nunc, hoc modo utens, celeriter novum codicem reprehendo antequam in ramum principalem evolutionis inveniat. Ut ratio inspiciendi respondeat ad admonitiones analyser, utilitas plog-converter vexillum additae --indicant monita:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
Cum hoc vexillo, converter codicem non-nullam reddet si monita sunt in fama analystoris. Reditus codice utens, praecommisso hamo, committere, vel trahere petitionem potes, et generatae analysris relatio exponi, communicari vel electronici mitti potest.
Nota. Cum primum indicem tabulariorum examinare incipies, totum consilium enucleabitur, quia analyser oportet generare fasciculum dependentiarum instrumenti fontis imaginum in capite limarum. Haec notatio analysendi C et C++ imagini est. In futurum, file dependentiae condiri possunt et sponte ab analysi renovabitur. Commodum reprimendi facit cum utendi tabulae indicem reprimendi modum in utendi incrementali analysi modo est quod solum opus est ut fasciculus ille fasciculus et non materia lima.
Principia generalia rogationis viverra analysis
Totum consilium analysing multum temporis accipit, unde sensum quandam tantum partem eius cohibere facit. Problema est te novas tabulas a reliquis documentorum documentis separare.
Intueamur exemplum arboris commissi cum duobus ramis;
Sit commissum cogitet A1 codicem satis magnum continet quod iam probatum est. Paulo ante fecimus ramum a commit A1 et quosdam lima mutavit.
Tu sane animadverti, quod post A1 plura commissa duo facta sunt, sed hae quoque immersiones aliorum ramorum erant, quia nos non committimus dominus. Et nunc tempus est, quando venit? hotfix paratus. Quam ob rem petitio viverra apparuit eive B3 ΠΈ A3.
Utique posset totum eventum eorum merger reprimere, sed hoc nimis tempus edax et iniustum fore, cum paucae tabulae mutatae sint. Ergo efficacius est resolvere nisi mutatos.
Ad hoc efficiendum discrimen inter ramos, cum in PATER rami, ex quo in dominum iungi volumus;
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
$MERGE_BASE postea singillatim videbimus. Re vera non omne CI servitium necessarias informationes praebet de datorum ad bus, ut quotiescumque novis modis ascendendi ad hanc datam obtinendam. Hoc infra in singulis descriptis servitiis singillatim describetur.
Discrimen igitur inter ramos obtinuit, vel potius indicem nominum fasciculorum mutatorum. Nunc opus est tabellam dare .pvs-pr.list (redirected output above to it) ad analysrem:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
Post analysim, necesse est tabellam stipendii (PVS-Studio.log) in formam legere facilem convertere:
plog-converter -t errorfile PVS-Studio.log --cerr -w
Hoc mandatum enumerare errores in
Tantum nunc opus est ut errores non solum ostendant, sed etiam ministerium nostrum ad contionem informent ac de praesentibus quaestionibus experiantur. Quam ob rem vexillum convertenti addita est -W (--indicant monita). Si admonitio analyser saltem una sit, utilitas reditus codicem plog-converter ad II mutabit, qui rursus ministerium CI de praesentia errorum potentialium certiorem faciet in lima petendi trahere.
Cogito Ergo C.
Configuratio facta est ut lima .travis.yml. Commodum enim te suadeo ut omnia in singularem scripturam cum functionibus quae a tabella vocentur inicias .travis.yml (vercundus script_name.sh function_name).
Addemus necessarium codicem ad scriptor at vercundushoc modo plus muneris consequemur. In sectione install quae sequuntur scribamus:
install:
- bash .travis.sh travis_install
Si quid haberes instructiones, eas in scripturam transferre potes, hyphens removendo.
Aperire tabella .travis.sh et adde analyser ad munus occasum 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
}
Nunc ad sectionem addamus script currere analysis:
script:
- bash .travis.sh travis_script
Et in scriptione vernacula:
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
}
Hoc signum debet currere post project aedificium, exempli gratia, si super CMake aedificares:
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
}
Eveniet sic:
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
}
Tu probabiliter iam animadvertit haec environment variables $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. Travis CI independenter declarat;
- $TRAVIS_PULL_REQUEST addit viverra petitionem numero vel falsum,si id ramus est;
- $TRAVIS_REPO_SLUG nomen reponit repositorium reponit.
Algorithmus ad hoc munus;
Respondet Travis CI codicibus reddere, monitis praesentia sic indicabo obsequium notare committo ut errores continentes.
Nunc propius inspiciamus hanc codicis lineam:
git diff --name-only origin/HEAD > .pvs-pr.list
Re vera est quod Travis CI ramos automatice immiscet dum petitionem trahere analyzing;
Ideo nos analyse A4et non B3->A3. Propter hanc plumam differentiam cum . computare oportet Π3qui nimirum cacumen rami a originem,.
Una res magni momenti supersunt - caching clientelas fasciculorum capitis in translatione unitates digesta (*.c, *.cc, *.cpp, etc.). Analystor has clientelas computat cum primum in modum reprimendi indicem fasciculorum immittitur et tunc salvat eas in .PVS-Studio presul. Travis CI te permittit ut folders cella, sic indicem datam servabimus .PVS-Studio/:
cache:
directories:
- .PVS-Studio/
Hoc signum tabellae adiciendum est .travis.yml. Hoc directorium varias notitias post analysin collectas reponit, quae signanter accelerare subsequentem analysin documenti vel analysin incrementalem derivare vult. Si hoc non fit, actu analystor omnes tabulas omni tempore resolvet.
Buddy
Sicut Travis CI,
Imprimis novam actionem in ecclesiam versus addere oportet;
Indicamus compilator qui usus est ad opus faciendum. Animadverte phialam receptaculum quod in hac actione instituitur. Exempli gratia, est specialis continens GCC;
Nunc instituamus PVS-Studium et utilitates necessarias;
Ad editorem sequentes lineas addamus:
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
Nunc eamus ad Tab (primam iconem) et codicem sequentem adde ad editori respondenti agrum:
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
Si sectionem in Travs-CI legeris, hoc signum iam tibi familiare est, nunc nova scena est;
Ita est, quod nunc resolvimus non exitum mergae, sed PATER rami, unde viverra petitio fit;
Ita sumus in conditione committi B3 et necesse est ut a differentia 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
ad determinandum A3 Utamur GitHub API:
https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}
Sequenti variabilius usus est quae Buddy praebet:
- $BUDDY_EXECUTION_PULL_REQEUST_NO - trahere petitionem numerus;
- $BUDDY_REPO_SLUG - coniunctio username et repositio (exempli gratia max/test).
Nunc salvemus mutationes infra pyga utentes et analysin rogationis viverra da:
Dissimilis Travis CI, non opus est ut specificare .pvs-studio pro caching, cum Buddy automatice omnia fascicula ad immissionem subsequentium recondat. Itaque ultimum reliquum est login et tesseram servare in PVS-Studii in Buddy. Post mutationes, salvis Pipeline reducti erimus. Necesse est nos movere ad variabiles variabiles constituere et addendo rationem et clavem pro PVS-Studio:
Post hoc, speciem novae petitionis trahendi vel felis recognitionis committendae erit. Si errores commissi contineat, Buddy hoc in pagina trahere petitionis indicabit.
AppVeyor
Constitutio AppVeyor Buddy similis est, quia omnia in interfaciei interreti ratione fiunt et nihil opus est *.yml fasciculum addere in repositorium project.
Eamus ad Occasus tab in prospectu propositi:
Librum deprimamus hanc paginam et fac cache salutaria ad petitiones colligendas:
Nunc eamus ad Tab Environment, ubi imaginem conventus exprimimus ac variabilium necessariorum ambitus:
Si superiores partes legeris, cum his duabus variabilibus es valde nota PVS_KEY ΠΈ PVS_USERNAME. Sin minus, moneam te necesse esse ut licentia PVS-Studii analystoris reprimatur. Iterum in Bash scriptoribus in futuro videbimus.
In eadem pagina infra indicamus folder pro caching:
Si hoc non fecerimus, totum consilium loco duorum tabulariorum resolvemus, sed e certis fasciculis output consequemur. Ideo refert rectam directorium nomen inire.
Nunc tempus est scriptionem probare. Aperi Probat tab et eligere Scriptor:
Opus est codice sequenti in hanc formam crustulum:
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
Sequens partem codicis operam dabimus:
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
Definitio potius assignationis valoris praecepti pwd variabilis, quae hunc valorem default reponat, prima specie mirum videtur, tamen omnia nunc exponam.
Cum analysrem in AppVeyor constituerem, mores maxime mirabiles analystoris offendit. Ex altera parte, omnia recte operata sunt, sed analysis non initium fecit. Multum temporis exegi animadvertens nos esse in directorio /home/appveyor/projectorum/testcalc/, et certus est analystor nos in /opt/appveyor/aedificare-agente/. Tunc intellexi $PWD variabile paulum iacere. Hac de causa, valorem manuale renovavi antequam ab analysi incipio.
Et tunc omnia sunt sicut prius;
Nunc sequens fragmentum considera;
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"`
In eo habetur differentia inter ramos super quos petitio traho declaratur. Ad hoc faciendum opus est variabiles ambitus sequentes:
- $ APPVEYOR_PULL_REQUEST_NUMBER - numerus petitionem viverra;
- $ APPVEYOR_REPO_NAME - nomen usoris et repositorium project.
conclusio,
Utique non consideravimus omnes possibilis integrationis continuae operas, tamen omnes speciales inter se similes operativae habent. Exceptis caching, unumquodque officium suum "bicyclum" facit, ita omnia semper diversa sunt.
Alicubi, sicut in Travis-CI, duo lineae codicis et opera emendate caching; alicubi, sicut in AppVeyor, vos iustus postulo ut folder in uncinis specificare; alicubi autem necesse est ut claves unicas creandi et rationem persuadere conetur tibi facultatem rescribere fragmentum conditivorum. Si igitur vis analysin trahere petitionum continuam integrationem quae supra non tractata est, primum fac ut problemata cum caching non habebis.
Tibi gratias ago pro attente. Si aliquid non elaborat, libenter nobis scribe
Si vis communicare hunc articulum cum auditorio Anglico loquentem, quaeso utere vinculo translationis: Maxim Zvyagintsev.
Source: www.habr.com