Skip to content
Snippets Groups Projects
Commit f309062d authored by Georg Seibt's avatar Georg Seibt :nerd:
Browse files

Clean submodules.

parent 5de1aecf
No related branches found
No related tags found
No related merge requests found
package de.uni_passau.fim.gitwrapper;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
import java.util.Scanner;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.apache.commons.io.FileUtils;
import static de.uni_passau.fim.gitwrapper.Repository.ConflictMarker.CONFLICT_END;
import static de.uni_passau.fim.gitwrapper.Repository.ConflictMarker.CONFLICT_MIDDLE;
import static de.uni_passau.fim.gitwrapper.Repository.ConflictMarker.CONFLICT_START;
......@@ -665,23 +674,48 @@ public class Repository {
* @return {@code true} if the cleanup was successful
*/
public boolean cleanup(String... retain) {
String[] strArr = new String[0];
List<String> pars = new ArrayList<>(3 + retain.length * 2);
pars.add("-x");
pars.add("-d");
pars.add("-f");
pars.add("-d");
pars.add("-f"); // Apparently this cleans directories containing .git folders.
for (String pattern : retain) {
pars.add("-e");
pars.add(pattern);
}
Optional<ExecRes> clean = git.exec(dir, "clean", pars.toArray(new String[0]));
Optional<ExecRes> clean = git.exec(dir, "clean", pars.toArray(strArr));
Optional<ExecRes> reset = clean.filter(ExecRes::succeeded) // this is '&&' in bash
.flatMap(r -> git.exec(dir, "reset", "--hard"));
if (!reset.isPresent() || !reset.get().succeeded()) {
LOG.warning("Failed to clean directory");
LOG.warning("Failed to clean " + this);
return false;
}
List<String> submoduleCleanPars = new ArrayList<>(8);
submoduleCleanPars.add("foreach");
submoduleCleanPars.add("--recursive");
submoduleCleanPars.add(git.getCmd());
submoduleCleanPars.add("clean");
submoduleCleanPars.addAll(pars.subList(0, 4));
List<String> submoduleResetPars = new ArrayList<>(5);
submoduleResetPars.add("foreach");
submoduleResetPars.add("--recursive");
submoduleResetPars.add(git.getCmd());
submoduleResetPars.add("reset");
submoduleResetPars.add("--hard");
Optional<ExecRes> cleanSub = git.exec(dir, "submodule", submoduleCleanPars.toArray(strArr));
Optional<ExecRes> resetSub = cleanSub.filter(ExecRes::succeeded) // this is '&&' in bash
.flatMap(r -> git.exec(dir, "submodule", submoduleResetPars.toArray(strArr)));
if (!resetSub.isPresent() || !resetSub.get().succeeded()) {
LOG.warning("Failed to clean submodules of " + this);
return false;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment