13
13
use PhpParser \PrettyPrinter \Standard ;
14
14
use Safe \Exceptions \FilesystemException ;
15
15
16
+ use function array_filter ;
16
17
use function array_map ;
17
18
use function dirname ;
18
19
use function file_exists ;
29
30
use function sys_get_temp_dir ;
30
31
use function trim ;
31
32
use function uniqid ;
33
+ use function usleep ;
32
34
33
35
use const DIRECTORY_SEPARATOR ;
34
36
@@ -77,20 +79,36 @@ public static function generate(Configuration $configuration, string $configurat
77
79
$ fileName .= (is_string ($ file ->contents ) && strpos ($ file ->contents , '<?php ' ) === false ? '' : '.php ' );
78
80
$ fileContents = $ fileStringyfier ->toString ($ file );
79
81
$ fileContentsHash = md5 ($ fileContents );
80
- try {
81
- /** @phpstan-ignore-next-line */
82
- @mkdir (dirname ($ fileName ), 0744 , true );
83
- } catch (FilesystemException ) {
84
- // @ignoreException
82
+
83
+ if (
84
+ ! $ state ->generatedFiles ->has ($ fileName ) ||
85
+ $ state ->generatedFiles ->get ($ fileName )->hash !== $ fileContentsHash
86
+ ) {
87
+ try {
88
+ /** @phpstan-ignore-next-line */
89
+ @mkdir (dirname ($ fileName ), 0744 , true );
90
+ } catch (FilesystemException ) {
91
+ // @ignoreException
92
+ }
93
+
94
+ file_put_contents ($ fileName , $ fileContents );
95
+ $ state ->generatedFiles ->upsert ($ fileName , $ fileContentsHash );
96
+
97
+ while (! file_exists ($ fileName ) || $ fileContentsHash !== md5 (file_get_contents ($ fileName ))) {
98
+ usleep (100 );
99
+ }
85
100
}
86
101
87
- file_put_contents ($ fileName , $ fileContents );
88
- $ state ->generatedFiles ->upsert ($ fileName , $ fileContentsHash );
102
+ $ existingFiles = array_filter (
103
+ $ existingFiles ,
104
+ static fn (string $ file ): bool => $ file !== $ fileName ,
105
+ );
89
106
90
107
if ($ file ->loadOnWrite === \OpenAPITools \Utils \File::DO_NOT_LOAD_ON_WRITE ) {
91
108
continue ;
92
109
}
93
110
111
+ /** @psalm-suppress UnresolvableInclude */
94
112
include_once $ fileName ;
95
113
}
96
114
}
@@ -104,7 +122,7 @@ public static function generate(Configuration $configuration, string $configurat
104
122
$ state ->additionalFiles ->remove ($ file ->name );
105
123
}
106
124
107
- foreach ($ configuration ->state ->additionalFiles ?? [] as $ additionalFile ) {
125
+ foreach ($ package ->state ->additionalFiles ?? [] as $ additionalFile ) {
108
126
$ state ->additionalFiles ->upsert (
109
127
$ additionalFile ,
110
128
file_exists ($ configurationLocation . $ package ->destination ->root . DIRECTORY_SEPARATOR . $ additionalFile ) ? self ::hash (file_get_contents ($ configurationLocation . $ package ->destination ->root . DIRECTORY_SEPARATOR . $ additionalFile )) : '' ,
0 commit comments