Commit 70d688e9 authored by liaozan's avatar liaozan 🏀

Avoid create file everytime

parent b63e2384
package com.schbrain.archetype.initializer.service; package com.schbrain.archetype.initializer.service;
import cn.hutool.cache.impl.TimedCache; import cn.hutool.cache.impl.TimedCache;
import cn.hutool.core.io.file.PathUtil;
import cn.hutool.core.util.ZipUtil; import cn.hutool.core.util.ZipUtil;
import cn.hutool.system.SystemUtil;
import com.schbrain.archetype.initializer.maven.MavenUtils; import com.schbrain.archetype.initializer.maven.MavenUtils;
import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam; import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam;
import com.schbrain.archetype.initializer.response.PreviewFileTree; import com.schbrain.archetype.initializer.response.PreviewFileTree;
import com.schbrain.common.exception.BaseException;
import com.schbrain.common.web.utils.ServletUtils; import com.schbrain.common.web.utils.ServletUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ContentDisposition; import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
...@@ -31,11 +35,16 @@ import java.util.stream.Collectors; ...@@ -31,11 +35,16 @@ import java.util.stream.Collectors;
* @author liaozan * @author liaozan
* @since 2022/3/20 * @since 2022/3/20
*/ */
@Slf4j
@Service @Service
public class ArchetypeService { public class ArchetypeService {
private static final String GITKEEP = ".gitkeep";
private final TimedCache<String, String> archetypeNameCache = new TimedCache<>(Duration.ofHours(1).toMillis()); private final TimedCache<String, String> archetypeNameCache = new TimedCache<>(Duration.ofHours(1).toMillis());
private final Path gitKeepFile = createGitKeepFile(SystemUtil.getUserInfo().getTempDir());
public String generate(ArchetypeGenerateParam param) { public String generate(ArchetypeGenerateParam param) {
String generateId = MavenUtils.generate(param); String generateId = MavenUtils.generate(param);
archetypeNameCache.put(generateId, param.getArtifactId()); archetypeNameCache.put(generateId, param.getArtifactId());
...@@ -59,10 +68,8 @@ public class ArchetypeService { ...@@ -59,10 +68,8 @@ public class ArchetypeService {
private PreviewFileTree buildFileTree(File root) { private PreviewFileTree buildFileTree(File root) {
File[] fileItems = Optional.ofNullable(root.listFiles()).orElse(new File[0]); File[] fileItems = Optional.ofNullable(root.listFiles()).orElse(new File[0]);
if (fileItems.length == 0) { if (fileItems.length == 0) {
File gitKeepFile = createGitKeepFile(root); Path target = Path.of(root.getPath(), GITKEEP);
if (gitKeepFile != null) { fileItems = new File[]{PathUtil.copy(gitKeepFile, target).toFile()};
fileItems = new File[]{gitKeepFile};
}
} }
List<PreviewFileTree> children = Arrays.stream(fileItems) List<PreviewFileTree> children = Arrays.stream(fileItems)
.map(fileItem -> { .map(fileItem -> {
...@@ -79,13 +86,13 @@ public class ArchetypeService { ...@@ -79,13 +86,13 @@ public class ArchetypeService {
return new PreviewFileTree(root, children); return new PreviewFileTree(root, children);
} }
private File createGitKeepFile(File root) { private Path createGitKeepFile(String directory) {
try { try {
Path created = Files.createFile(Path.of(root.getPath(), ".gitkeep")); Path created = Files.createFile(Path.of(directory, GITKEEP));
Files.writeString(created, "This file is used to keep an empty folder when git uploads, If you put other files in the folder, delete this file please"); Files.writeString(created, "This file is used to keep an empty folder when git uploads, If you put other files in the folder, delete this file please");
return created.toFile(); return created;
} catch (IOException ignore) { } catch (IOException e) {
return null; throw new BaseException("Failed to create .gitkeep file", e);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment