Valider 5e9f4b59 rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

- quand un zip existe pour un tags/ on ne le refait jamais

- par defaut on svn up avec un --ignore-externals sur le repo complet car sinon le up de spip explose, et on check ensuite les externals des dossiers avant de zipper
parent 8f6ab138
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+16 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -238,8 +238,19 @@ function creer_paquet($paquet, $dir_repo, $dir_paq, $dir_tmp, $nom_vcs, $dtd_pri
	$zip = $paquet['nom'] .".zip";
	$zippath = $dir_paq.$zip;

	if (!is_null($dirs_changed)
		AND !in_array($dsource,$dirs_changed)
	$changed = true;
	if (strpos($paquet['source'], 'tags/') === 0) {
		// un tag ne change jamais : une fois que le zip existe on ne le regenere jamais
		$changed = false;
	}
	else {
		// si on a une liste des repertoires modifies, on sait si le contenu a change ou pas
		if (!is_null($dirs_changed) AND !in_array($dsource,$dirs_changed)) {
			$changed = false;
		}
	}

	if (!$changed
		AND file_exists($zippath)
		AND file_exists($cache)
		AND $res = file_get_contents($cache)
@@ -252,6 +263,9 @@ function creer_paquet($paquet, $dir_repo, $dir_paq, $dir_tmp, $nom_vcs, $dtd_pri
	}
	else {

		// verifier les externals si besoin (concerne le core principalement)
		vcs_externals_smart_update($nom_vcs, $dir_repo, $paquet['source']);

		// Creation de l'archive
		// -- Ajouter le fichier svn.revision dans les fichiers de l'archive pour les besoins de SPIP
		$file_rev = $dsource . "/svn.revision";
+41 −16
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -157,7 +157,7 @@ function vcs_smart_update($nom_vcs, $dir_repo, $url, $force_update = false) {
				$fc = rtrim($dir_repo,'/')."/dirs-changed.txt";
				$vcs("sync", $url, $dir_repo);
				if ($force_update){
					$vcs("up",rtrim($dir_repo,'/'), $dir_repo);
					$vcs("up",'--ignore-externals ' . rtrim($dir_repo,'/'), $dir_repo);
				}
				if (file_exists($fc)) {
					$changed = file($fc);
@@ -169,8 +169,9 @@ function vcs_smart_update($nom_vcs, $dir_repo, $url, $force_update = false) {
				return true;
			}
			else {
				// le up est fait uniquement si force
				$vcs("up", rtrim($dir_repo,'/'), $dir_repo);
				// le up est fait a chaque fois, sauf si un jeton demande de up uniquement sur le force
				if ($force_update or !file_exists($dir_repo . 'forced-up-only.txt')) {
					$vcs("up", '--ignore-externals ' . rtrim($dir_repo,'/'), $dir_repo);
					$rev_after = vcs_read_current_rev($nom_vcs, $dir_repo);

					// recuperer la liste des fichiers modifies
@@ -186,14 +187,38 @@ function vcs_smart_update($nom_vcs, $dir_repo, $url, $force_update = false) {
					$dirs_changed = array_filter($dirs_changed);
					dirschanged_append($dir_repo, $dirs_changed);
					return true;
				}
				return false;
			}
			break;
	}

	return false;
}

function vcs_externals_smart_update($nom_vcs, $dir_repo, $sub_dir) {

	switch ($nom_vcs) {
		case 'svn':
			$dir_repo = rtrim($dir_repo, '/') . '/';
			$sub_dir = rtrim($sub_dir, '/');
			// lire si il y a des externals dans le sous-dossier
			$externals = vcs_exec_svn("propget", "svn:externals -R " . $dir_repo . $sub_dir);
			$externals = implode("\n", $externals);
			if (strpos($externals, "://") !== false) {
				vcs_exec_svn('up', $dir_repo . $sub_dir);
				return true;
			}
			break;
		default:
			// rien a faire
			break;
	}

	return false;
}


// Interface de commande du gestionnaire de version Subversion (GIT)
//
// $cmd			: commande git