web-dev-qa-db-fra.com

Mise à jour d'un plugin Wordpress casse SVN

J'ai un blog avec tous les plugins dont j'ai besoin engagés dans un référentiel svn interne. Wordpress montre que certains plugins doivent être mis à jour, mais lorsque je le ferai, Wordpress supprimera le dossier de ce plugin afin que les fichiers .svn soient également supprimés. Cela cassera le référentiel pour ce plugin. Tout moyen de contourner ça?

3
Matthew Xerri

une solution simple consiste à mettre à jour les plugins par SVN à partir du référentiel de plugins.

3
Bainternet

Je viens de décider de patcher le noyau pour résoudre ce problème. Nous gérons de nombreux projets de développement distincts construits sur wordpress et nous aimons garder les mises à jour des plugins sous notre propre contrôle, sans les tracas associés des externes. Je préférerais un hook, mais il n'en existe pas et il vaut probablement mieux ne pas en fournir un pour des actions de niveau aussi bas. Mais du côté positif, les modifications n'affectent qu'une seule fonction du fichier class-wp-filesystem-direct.php et ce fichier n'a pas changé de manière significative depuis presque deux ans.

//@version 3.4

function delete($file, $recursive = false, $type = false) {
    if ( empty($file) ) //Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem.
        return false;
    $file = str_replace('\\', '/', $file); //for win32, occasional problems deleting files otherwise

    if ( 'f' == $type || $this->is_file($file) ) 
        return @unlink($file);
    if ( ! $recursive && $this->is_dir($file) ) 
        return @rmdir($file);

    //At this point its a folder, and we're in recursive mode
    $file = trailingslashit($file);
    $retval = true;

    //preserve svn folders
    if (preg_match("|\/\.svn\/$|", $file))
        return $retval;

    $filelist = $this->dirlist($file, true);

    if ( is_array($filelist) ) //false if no files, So check first.
        foreach ($filelist as $filename => $fileinfo)
            if ( ! $this->delete($file . $filename, $recursive, $fileinfo['type']) )
                $retval = false;

    //don't worry if directories are left behind
    if ( file_exists($file) ) @rmdir($file);

    return $retval;
}

Les principales différences consistent à ignorer entièrement les dossiers /.svn/, puis à ne pas échouer lorsque les répertoires ne peuvent pas être supprimés. Ils seront toujours supprimés s'ils ne contiennent pas de dossiers enfants .svn. En conséquence, vous aurez peut-être besoin d'élaguer quelques répertoires "vides" de temps en temps, mais je n'ai pas encore eu à le faire. Et vous aurez bien sûr besoin de re-patcher le fichier chaque fois que vous mettrez à jour le noyau.

Une autre option consiste à télécharger le plugin en tant que fichier Zip à partir du répertoire plugins wordpress et à utiliser un utilitaire de gestion de fichiers pour effectuer une fusion unidirectionnelle ou une synchronisation entre les deux répertoires. L’explorateur Windows le fera en mode natif si vous faites simplement glisser le nouveau dossier du plug-in par-dessus le dossier existant. Mais il est beaucoup plus facile de cliquer sur ce lien de mise à jour dans la zone wp-admin.

1
Marcus Pope

Comment mettez-vous à jour les plugins?

Le seul moyen de contourner ce problème que j’ai trouvé est d’aller dans chaque dossier et de remplacer les fichiers dossier par dossier sans remplacer un dossier. Une douleur mais c'est la seule façon que je connaisse.

0
Alex Older