source: spip-zone/_galaxie_/code.spip.net/autodoc/branches/v2.4/src/autodoc/Plugin/Core/Transformer/Writer/FileCleaner.php @ 87564

Last change on this file since 87564 was 87564, checked in by marcimat@…, 5 years ago

Ne plus supprimer les vieux fichiers ou dossiers ; un changement de comportement de phpdocumentor fait qu'ils ne sont pas forcément recréés lors d'une génération de la documentation et que du coup, notre tentative d'enlever les fichiers et dossiers périmés en fonction du timestamp ne fonctionne plus.

File size: 3.1 KB
Line 
1<?php
2/**
3 * autodoc
4 *
5 * Supprimer les fichiers qui n'ont pas servi dans la nouvelle génération du template
6 *
7 * Totalement inspiré de phpDocumentor\Transformer\Writer\FileIo
8 */
9
10namespace autodoc\Plugin\Core\Transformer\Writer;
11
12/**
13 * Writer containing file cleanup operations.
14 */
15use phpDocumentor\Descriptor\ProjectDescriptor;
16use phpDocumentor\Transformer\Exception;
17use phpDocumentor\Transformer\Transformation;
18use phpDocumentor\Transformer\Writer\WriterAbstract;
19
20use Symfony\Component\Finder\Finder;
21
22
23class FileCleaner extends WriterAbstract
24{
25    /** @var \phpDocumentor\Transformer\Transformation */
26    protected $transformation = null;
27
28    /**
29     * Cleanup the files.
30     *
31     * @param ProjectDescriptor $project        Document containing the structure.
32     * @param Transformation    $transformation Transformation to execute.
33     *
34     * @return void
35     */
36    public function transform(ProjectDescriptor $project, Transformation $transformation)
37    {
38        $artifact = $transformation->getTransformer()->getTarget()
39            . DIRECTORY_SEPARATOR . $transformation->getArtifact();
40        $transformation->setArtifact($artifact);
41
42        # [todo] Un changement de comportemant fait que maintenant
43        # il semblerait que phpdocumentor ne recopie plus systématiquement
44        # les fichiers et dossiers s'ils sont identiques. Du coup, le timestamp
45        # des fichiers (css, bootstrap) ne change pas et les dossiers sont supprimés
46        # par ce code. En attendant une correction de ce code, on évite ces suppressions.
47        #$this->cleanup($transformation);
48    }
49
50    /**
51     * Cleanup the render output
52     *
53     * Delete all old files (and empty directories after).
54     *
55     * @param Transformation $transformation Transformation to use as data source.
56     *
57     * @throws Exception
58     *
59     * @return void
60     */
61    public function cleanup(Transformation $transformation)
62    {
63        $dirOutput = $transformation->getTransformer()->getTarget();
64
65        if (!is_writable($dirOutput)) {
66            throw new Exception('Unable to write to: ' . dirname($transformation->getArtifact()));
67        }
68
69        $finder = new Finder();
70
71        // supprimer les fichiers générés de plus de 2 heures
72        $files = $finder->files()
73            ->in($dirOutput)
74            ->date("before - 2 hours");
75
76        $directories = array();
77        foreach ($files as $file) {
78            $profondeur = count(explode('/', $file->getRelativePathname())) - 1;
79            if ($profondeur > 0) {
80                $directories[ dirname($file->getRealpath()) ] = $profondeur;
81            }
82            unlink($file->getRealpath());
83        }
84
85        unset($files);
86
87        // supprimer les dossiers vides
88        foreach ($directories as $dir => $profondeur) {
89            while ($profondeur > 0) {
90                if (is_dir($dir)) {
91                    $finder = new Finder();
92                    if ($finder->in($dir)->count()) {
93                        break;
94                    }
95                    rmdir($dir);
96                }
97                $dir = dirname($dir);
98                $profondeur--;
99            }
100        }
101    }
102}
Note: See TracBrowser for help on using the repository browser.