post-commit.php

Share in top social networks!

Con questo script potete intercettare i web-hooks inviati da google-code e far applicare le modifiche ai vostri files sul webserver! E’ molto utile per i programmatori web, che hostano le loro applicazioni su google-code!
E’ una buona cosa perchè le applicazioni hostate su google-code devono essere free ed open source!
Ulteriori descrizioni a breve (vista l’ora mi perdonerete…)

With this script you can catch web-hooks sent by google-code and have your file on the webserver updated.
It’s very useful for web programmers that hosts their web-application on google-code.
It’s a good thing because google-code’s hosted application must be free and opensource!

< ?php
$url_repository="http://PROGETTO.googlecode.com/svn";
$chiave="";
$dest_dir=""; //directory di destinazione
$data=file_get_contents("php://input");//recupero i dati trasmessi da google!
$digest=hash_hmac("md5", $data, $chiave); //hash
$hook=$_SERVER["HTTP_GOOGLE_CODE_PROJECT_HOSTING_HOOK_HMAC"]; //l'header inviato da google
$log_file = "post/file.txt";//percordo del file di log.

if ($hook && $hook==$digest){
	$connect = fopen($log_file, "a");
	fputs($connect,$data."\n");
	fputs($connect, "\n---------\n");
	fclose($connect);

//fine file di log!
//inizio a determinare i files modificati!
	$via_iniz=strstr($data,'modified":["');
	$via_iniz=substr($via_iniz,12);
	$fine_files=strpos($via_iniz,'"],"path_count');
	$elenco=substr($via_iniz,0,$fine_files);
	$datam=explode('","',$elenco);
//ho l'elenco di files modificati in $datam
//inizio l'elenco di files aggiunti
	$via_iniz=strstr($data,'added":["');
	$via_iniz=substr($via_iniz,9);
	$fine_files=strpos($via_iniz,'"],"au');
	$elenco=substr($via_iniz,0,$fine_files);
	$dataa=explode('","',$elenco);
	$datas=array_merge($dataa,$datam);
	foreach ($datas AS $dato){
		$source=$dato;
		$dest=str_replace("/trunk","./".$dest_dir,$dato);
		if (function_exists('curl_init')) {
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url_repository.$source);
			curl_setopt($ch, CURLOPT_HEADER, 0);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
			$lettura = curl_exec($ch);
			curl_close($ch);
		}
		file_put_contents($dest,$lettura);
		chmod($dest,0777);
	}
//trovo i file rimossi!
	$via_iniz=strstr($data,'removed":["');
	$via_iniz=substr($via_iniz,11);
	$fine_files=strpos($via_iniz,'"],"rev');
	$elenco=substr($via_iniz,0,$fine_files);
	$datar=explode('","',$elenco);
	foreach ($datar AS $dato){
		$dest=str_replace("/trunk","./".$dest_dir,$dato);
		unlink("./".$dest);
	}
}else{
	echo "Errore, Hutch è pazzo"; //citazione da scrubs!
}
?>

Faccio presente a chiunque che il codice è ancora in Alpha,deve venire usato a proprio rischio e pericolo!

THIS SCRIPT IS PROVIDED “AS IS” AND WITHOUT ANY WARRANTY.

Ringrazio Josh Reisner da cui ho preso spunto per questo script.
Thanks Josh Reisner from which I took inspiration for this script.

Prossimo passo sarà la possibilità di creare un pacchetto compresso contenente la versione aggiornata del codice.

Share in top social networks!

4 pensieri su “post-commit.php

  1. Pingback: Aleritty.net » Google web-hook

  2. Pingback: notes for others, notes for myself » Post-commit hook in PHP for Google Code

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>