/*******************************************************************************
* Copyright (C) 2011, 2013 Dariusz Luksza <dariusz@luksza.org> and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.egit.ui.internal.actions;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.egit.ui.internal.commands.shared.RebaseCurrentRefCommand;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryState;
/**
* An action to rebase the current branch on top of given branch. This is the
* "main" action of the rebase pulldown, see {@link RebaseAction} for the menu
* items.
*
* @see RebaseAction
*/
public class RebaseActionHandler extends RepositoryActionHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
RebaseCurrentRefCommand rebaseCurrent = new RebaseCurrentRefCommand();
rebaseCurrent.setEnabled(event.getApplicationContext());
// Because the enabled state is for both starting a new rebase as well
// as working with an existing rebase, it can be that this is executed
// even though starting a new rebase is not possible. So check enabled
// state again here. See also isEnabled.
if (rebaseCurrent.isEnabled())
return rebaseCurrent.execute(event);
else
return null;
}
@Override
public boolean isEnabled() {
Repository repo = getRepository();
if (repo == null)
return false;
// Either we want this to be enabled because a new rebase can be started
// (main action) or an active rebase can be continued, skipped or
// aborted (menu items). Even when the main action is not enabled we
// must enable this because otherwise the menu items cannot be opened.
RepositoryState state = repo.getRepositoryState();
return state.isRebasing()
|| RebaseCurrentRefCommand.isEnabledForState(repo, state);
}
}