Skip to content

Commit 94ac1ed

Browse files
author
lijie78
committed
add: Allow adding a directory
1 parent 4665f71 commit 94ac1ed

File tree

1 file changed

+35
-7
lines changed
  • src/main/java/club/qqtim/command

1 file changed

+35
-7
lines changed

src/main/java/club/qqtim/command/Add.java

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
import picocli.CommandLine;
1212

1313
import java.io.File;
14+
import java.io.IOException;
1415
import java.nio.charset.StandardCharsets;
16+
import java.nio.file.Files;
17+
import java.nio.file.Paths;
1518
import java.util.List;
1619

1720
/**
@@ -34,21 +37,46 @@ public class Add implements Runnable{
3437

3538
@Override
3639
public void run() {
37-
add(files);
40+
addFiles(files);
3841
}
3942

40-
private void add(List<String> files) {
43+
private void addFiles(List<String> files) {
4144
final String indexContent = FileUtil.getFileAsString(ConstantVal.INDEX, ConstantVal.NONE);
4245
final JsonElement jsonElement = new Gson().fromJson(indexContent, JsonElement.class);
4346
final JsonObject asJsonObject = jsonElement.getAsJsonObject();
4447

4548
files.forEach(file -> {
46-
HashObject hashObject = new HashObject();
47-
hashObject.setFile(new File(file));
48-
hashObject.setType(ConstantVal.BLOB);
49-
final String objectId = hashObject.call();
50-
asJsonObject.addProperty(file, objectId);
49+
final boolean isFile = !FileUtil.isFile(file);
50+
if (isFile) {
51+
addFile(asJsonObject, file);
52+
} else { // is directory
53+
addDirectory(asJsonObject, file);
54+
}
5155
});
5256
FileUtil.createFile(asJsonObject.toString(), ConstantVal.INDEX);
5357
}
58+
59+
private void addFile(JsonObject asJsonObject, String file) {
60+
HashObject hashObject = new HashObject();
61+
hashObject.setFile(new File(file));
62+
hashObject.setType(ConstantVal.BLOB);
63+
final String objectId = hashObject.call();
64+
asJsonObject.addProperty(file, objectId);
65+
}
66+
67+
68+
private void addDirectory(JsonObject asJsonObject, String file) {
69+
try {
70+
Files.walk(Paths.get(file), Integer.MAX_VALUE)
71+
.filter(Files::isRegularFile)
72+
.forEach(regularFile -> addFile(asJsonObject, regularFile.toString()));
73+
} catch (IOException e) {
74+
log.error(e.toString());
75+
}
76+
}
77+
78+
79+
80+
81+
5482
}

0 commit comments

Comments
 (0)