1919import io .qameta .allure .internal .Allure2ModelJackson ;
2020import io .qameta .allure .model .TestResult ;
2121import io .qameta .allure .model .TestResultContainer ;
22+ import org .apache .commons .io .FileUtils ;
2223
2324import java .io .IOException ;
2425import java .io .InputStream ;
2526import java .nio .file .Files ;
2627import java .nio .file .Path ;
2728import java .util .Objects ;
2829import java .util .UUID ;
30+ import java .util .concurrent .atomic .AtomicBoolean ;
2931
3032/**
3133 * @author charlie (Dmitry Baev).
@@ -36,6 +38,8 @@ public class FileSystemResultsWriter implements AllureResultsWriter {
3638
3739 private final ObjectMapper mapper ;
3840
41+ private final AtomicBoolean isOutputCleaned = new AtomicBoolean (false );
42+
3943 public FileSystemResultsWriter (final Path outputDirectory ) {
4044 this .outputDirectory = outputDirectory ;
4145 this .mapper = Allure2ModelJackson .createMapper ();
@@ -46,6 +50,7 @@ public void write(final TestResult testResult) {
4650 final String testResultName = Objects .isNull (testResult .getUuid ())
4751 ? generateTestResultName ()
4852 : generateTestResultName (testResult .getUuid ());
53+ cleanDirectoriesIfNeeded (outputDirectory );
4954 createDirectories (outputDirectory );
5055 final Path file = outputDirectory .resolve (testResultName );
5156 try {
@@ -60,6 +65,7 @@ public void write(final TestResultContainer testResultContainer) {
6065 final String testResultContainerName = Objects .isNull (testResultContainer .getUuid ())
6166 ? generateTestResultContainerName ()
6267 : generateTestResultContainerName (testResultContainer .getUuid ());
68+ cleanDirectoriesIfNeeded (outputDirectory );
6369 createDirectories (outputDirectory );
6470 final Path file = outputDirectory .resolve (testResultContainerName );
6571 try {
@@ -71,6 +77,7 @@ public void write(final TestResultContainer testResultContainer) {
7177
7278 @ Override
7379 public void write (final String source , final InputStream attachment ) {
80+ cleanDirectoriesIfNeeded (outputDirectory );
7481 createDirectories (outputDirectory );
7582 final Path file = outputDirectory .resolve (source );
7683 try (InputStream is = attachment ) {
@@ -80,6 +87,17 @@ public void write(final String source, final InputStream attachment) {
8087 }
8188 }
8289
90+ private void cleanDirectoriesIfNeeded (final Path directory ) {
91+ if (isOutputCleaned .compareAndSet (false , true )) {
92+ try {
93+ FileUtils .deleteDirectory (directory .toFile ());
94+ } catch (IOException e ) {
95+ throw new AllureResultsWriteException ("Could not clean Allure results directory" , e );
96+ }
97+ }
98+
99+ }
100+
83101 private void createDirectories (final Path directory ) {
84102 try {
85103 Files .createDirectories (directory );
0 commit comments