|
|

Faire une vérification des fichiers PHP via le Commit Hook dans gForge
Voici un petit tutorial pour faire un filtre qui va tester les fichiers commit et les refuser si ce ne sont pas des php valide.
Fait avec la version de gForge AS 5.5
Avec le compte administrateur de gForge, aller dans "Admin/Plugins/SCM commit Filters"
 Cliquez sur "add new"
Bien coché le "filter for" pour SVN :

La description est celle que vous voulez donner au filtre. Pour la commande on va avoir besoin de $PATH qui donne le chemin du dépôt et de $FILE qui dans le cas du pré commit renvois l’id de la transaction.
Dans le cas présent j’ai chargé le fichier au même emplacement que ceux d’origine, à savoir :
/opt/gforge5/plugins/scmsvn/bin/
L'url complète de la commande est donc :
/opt/gforge5/plugins/scmsvn/bin/svn_php_precommit_gforge.php $PATH $FILE
Cliquez sur "add" vous devriez avoir plus ou moins ceci :

Maintenant il faut aller dans tous les projets concernés cocher la case pour activer le filtre : C’est un peu caché, il faut aller dans "SVN / Admin / Edit commit filter" :
* l'application se fait en cron, les changements ne sont donc pas immédiats.
Voici mon fichier "svn_php_precommit_gforge.php":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#!/usr/bin/php
<?php
/**
* Test les fichiers PHP qui vont etre commit
*
* Command: "/opt/gforge5/plugins/scmsvn/bin/svn_php_precommit_gforge.php $PATH $FILE"
*
* @version $Id$
* @author Vlyan (www.vlyan.com)
*/
// + + + FUNCTIONS + + +
/**
* Everything must be written to stderr
* @param String $sError
* @return Bool
*/
function log_error($sError) {
return file_put_contents("php://stderr", $sError);
}
/**
* Shell cmd
* @param String $sCmd
* @param Array $aOutput
* @return Int
*/
function execute($sCmd, &$aOutput) {
$iRetval = 0;
exec($sCmd, $aOutput, $iRetval);
return $iRetval;
}
// + + + End Functions + + +
// arg count
if (!isset($argv[1]) || !isset($argv[2])) {
log_error('Usage: '.basename(__FILE__).' <repository path> <transaction id> : argv='.var_export($argv, true));
exit(1);
}
// Path to binaries
$sSvnPath = dirname(`which svn`);
$sSvnLook = $sSvnPath.'/svnlook';
$sPhp = trim(`which php`);
if (empty($sSvnPath) || empty($sPhp)) {
log_error("Error while fetching paths: SvnPath='$sSvnPath', Php='$sPhp'");
exit(1);
}
$sRepoPath = $argv[1];
$sTransId = $argv[2];
// modified files
$aFiles = array();
$iExec = execute($sSvnLook.' changed -t "'.$sTransId.'" "'.$sRepoPath.'" | cut -b 5-', $aFiles);
if (empty($aFiles)) {
log_error('Files not found : aFiles='.var_export($aFiles, true));
exit(1);
}
// for each file
foreach($aFiles as $sFile) {
// check only php file
if (substr($sFile, -4) == '.php') {
$aOut = array();
$iExec = execute($sSvnLook.' cat -t "'.$sTransId.'" "'.$sRepoPath.'" "'.$sFile.'" | '.$sPhp.' -l', $aOut);
if ($iExec != 0) {
// exit if code is not zero, cancel commit
log_error("Transaction cancelled: Errors found in file '$sFile'.\n".var_export($aOut, true));
exit(1);
}
}
}
// ok
exit(0);
|
|
|
|

oct.11
Interface personnalisée

mai.09

avr.09
Lanceur graphique pour Left4Dead

nov.08
Lanceur graphique pour les serveurs DoL.

nov.08
Programme alternatif au ComponentChooser pour les personnes ayant le .net et ne voulant pas insta...
|