use of org.eclipse.jgit.lib.RebaseTodoLine in project egit by eclipse.
the class RebaseInteractivePlan method createElementList.
private List<PlanElement> createElementList(List<RebaseTodoLine> rebaseTodoLines, RevWalk walk) {
List<PlanElement> planElements = new ArrayList<PlanElement>(rebaseTodoLines.size());
for (RebaseTodoLine todoLine : rebaseTodoLines) {
PlanElement element = createElement(todoLine, walk);
planElements.add(element);
}
return planElements;
}
use of org.eclipse.jgit.lib.RebaseTodoLine in project egit by eclipse.
the class RewordCommitOperation method execute.
@Override
public void execute(IProgressMonitor m) throws CoreException {
IWorkspaceRunnable action = new IWorkspaceRunnable() {
@Override
public void run(IProgressMonitor pm) throws CoreException {
SubMonitor progress = SubMonitor.convert(pm, 2);
progress.subTask(MessageFormat.format(CoreText.RewordCommitOperation_rewording, commit.name()));
InteractiveHandler handler = new InteractiveHandler() {
@Override
public void prepareSteps(List<RebaseTodoLine> steps) {
for (RebaseTodoLine step : steps) {
if (step.getCommit().prefixCompare(commit) == 0) {
try {
step.setAction(RebaseTodoLine.Action.REWORD);
} catch (IllegalTodoFileModification e) {
// shouldn't happen
}
}
}
}
@Override
public String modifyCommitMessage(String oldMessage) {
return newMessage;
}
};
try (Git git = new Git(repository)) {
git.rebase().setUpstream(commit.getParent(0)).runInteractively(handler).setOperation(RebaseCommand.Operation.BEGIN).call();
} catch (GitAPIException e) {
throw new TeamException(e.getLocalizedMessage(), e.getCause());
}
progress.worked(1);
ProjectUtil.refreshValidProjects(ProjectUtil.getValidOpenProjects(repository), progress.newChild(1));
}
};
ResourcesPlugin.getWorkspace().run(action, getSchedulingRule(), IWorkspace.AVOID_UPDATE, m);
}
use of org.eclipse.jgit.lib.RebaseTodoLine in project egit by eclipse.
the class EditCommitOperation method execute.
@Override
public void execute(IProgressMonitor m) throws CoreException {
IWorkspaceRunnable action = new IWorkspaceRunnable() {
@Override
public void run(IProgressMonitor pm) throws CoreException {
SubMonitor progress = SubMonitor.convert(pm, 2);
progress.subTask(MessageFormat.format(CoreText.EditCommitOperation_editing, commit.name()));
InteractiveHandler handler = new InteractiveHandler() {
@Override
public void prepareSteps(List<RebaseTodoLine> steps) {
for (RebaseTodoLine step : steps) {
if (step.getCommit().prefixCompare(commit) == 0) {
try {
step.setAction(RebaseTodoLine.Action.EDIT);
} catch (IllegalTodoFileModification e) {
// shouldn't happen
}
}
}
}
@Override
public String modifyCommitMessage(String oldMessage) {
return oldMessage;
}
};
try (Git git = new Git(repository)) {
git.rebase().setUpstream(commit.getParent(0)).runInteractively(handler).setOperation(RebaseCommand.Operation.BEGIN).call();
} catch (GitAPIException e) {
throw new TeamException(e.getLocalizedMessage(), e.getCause());
}
progress.worked(1);
ProjectUtil.refreshValidProjects(ProjectUtil.getValidOpenProjects(repository), progress.newChild(1));
}
};
ResourcesPlugin.getWorkspace().run(action, getSchedulingRule(), IWorkspace.AVOID_UPDATE, m);
}
use of org.eclipse.jgit.lib.RebaseTodoLine in project egit by eclipse.
the class EditCommitOperationTest method edit.
@Test
public void edit() throws Exception {
EditCommitOperation op = new EditCommitOperation(testRepository.getRepository(), firstCommit);
op.execute(new NullProgressMonitor());
assertEquals(RepositoryState.REBASING_INTERACTIVE, testRepository.getRepository().getRepositoryState());
List<RebaseTodoLine> todos = testRepository.getRepository().readRebaseTodo(GIT_REBASE_TODO, false);
assertEquals(1, todos.size());
assertEquals(RebaseTodoLine.Action.PICK, todos.get(0).getAction());
assertTrue(secondCommit.getId().startsWith(todos.get(0).getCommit()));
ObjectId headId = testRepository.getRepository().resolve(Constants.HEAD);
assertEquals(firstCommit.getId(), headId);
}
use of org.eclipse.jgit.lib.RebaseTodoLine in project egit by eclipse.
the class SquashCommitsOperation method execute.
@Override
public void execute(IProgressMonitor m) throws CoreException {
IWorkspaceRunnable action = new IWorkspaceRunnable() {
@Override
public void run(IProgressMonitor pm) throws CoreException {
SubMonitor progress = SubMonitor.convert(pm, 2);
progress.subTask(MessageFormat.format(CoreText.SquashCommitsOperation_squashing, Integer.valueOf(commits.size())));
InteractiveHandler handler = new InteractiveHandler() {
@Override
public void prepareSteps(List<RebaseTodoLine> steps) {
RevCommit firstCommit = commits.get(0);
for (RebaseTodoLine step : steps) {
if (isRelevant(step.getCommit())) {
try {
if (step.getCommit().prefixCompare(firstCommit) == 0)
step.setAction(RebaseTodoLine.Action.PICK);
else
step.setAction(RebaseTodoLine.Action.SQUASH);
} catch (IllegalTodoFileModification e) {
// shouldn't happen
}
}
}
}
private boolean isRelevant(AbbreviatedObjectId id) {
for (RevCommit commit : commits) {
if (id.prefixCompare(commit) == 0)
return true;
}
return false;
}
@Override
public String modifyCommitMessage(String oldMessage) {
return messageHandler.modifyCommitMessage(oldMessage);
}
};
try (Git git = new Git(repository)) {
RebaseCommand command = git.rebase().setUpstream(commits.get(0).getParent(0)).runInteractively(handler).setOperation(RebaseCommand.Operation.BEGIN);
MergeStrategy strategy = Activator.getDefault().getPreferredMergeStrategy();
if (strategy != null) {
command.setStrategy(strategy);
}
command.call();
} catch (GitAPIException e) {
throw new TeamException(e.getLocalizedMessage(), e.getCause());
}
progress.worked(1);
ProjectUtil.refreshValidProjects(ProjectUtil.getValidOpenProjects(repository), progress.newChild(1));
}
};
ResourcesPlugin.getWorkspace().run(action, getSchedulingRule(), IWorkspace.AVOID_UPDATE, m);
}
Aggregations