package com.beijunyi.parallelgit.utils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
import org.eclipse.jgit.lib.*;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import static java.util.Collections.unmodifiableList;
import static org.eclipse.jgit.lib.Constants.R_STASH;
import static org.eclipse.jgit.lib.ObjectId.zeroId;
public final class StashUtils {
public static void addToStash(RevCommit commit, Repository repo) throws IOException {
RefUpdate update = repo.updateRef(R_STASH);
update.setNewObjectId(commit);
update.setRefLogIdent(commit.getCommitterIdent());
AnyObjectId prevStash = repo.resolve(R_STASH);
update.setExpectedOldObjectId(prevStash != null ? prevStash : zeroId());
update.forceUpdate();
}
@Nonnull
public static List<RevCommit> listStashes(Repository repo) throws IOException {
List<RevCommit> ret = new ArrayList<>();
List<ReflogEntry> logs = RefUtils.getRefLogs(R_STASH, Integer.MAX_VALUE, repo);
try(RevWalk rw = new RevWalk(repo)) {
for(ReflogEntry log : logs) ret.add(rw.parseCommit(log.getNewId()));
}
return unmodifiableList(ret);
}
}