blob: 92b65275c8aee16d644d74a27db31aa5ae6d7c2b [file] [log] [blame]
package com.googlesource.gerrit.plugins.refprotection;
import static org.eclipse.jgit.lib.Constants.R_HEADS;
import static org.eclipse.jgit.lib.Constants.R_TAGS;
import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
import org.eclipse.jgit.lib.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class RefUpdateListener implements GitReferenceUpdatedListener {
private static final Logger log = LoggerFactory
.getLogger(RefUpdateListener.class);
@Override
public void onGitReferenceUpdated(final Event event) {
if (!isNewRef(event) && isRelevantRef(event)) {
if (isRefDeleted(event) || isNonFastForwardUpdate(event)) {
createBackupBranch(event);
}
}
}
/**
* Create a backup branch for the given ref.
*
* @param event the Event
*/
private void createBackupBranch(Event event) {
// TODO
}
/**
* Is the event on a relevant ref?
*
* @param event the Event
* @return True if relevant, otherwise False.
*/
private boolean isRelevantRef(Event event) {
return event.getRefName().startsWith(R_HEADS)
|| event.getRefName().startsWith(R_TAGS);
}
/**
* Is the event a new ref?
*
* @param event the Event
* @return True if a new ref, otherwise False.
*/
private boolean isNewRef(Event event) {
return event.getOldObjectId().equals(ObjectId.zeroId().getName());
}
/**
* Is the event a ref deletion?
*
* @param event the Event
* @return True if a ref deletion, otherwise False.
*/
private boolean isRefDeleted(Event event) {
if (event.getNewObjectId().equals(ObjectId.zeroId().getName())) {
log.info(String.format(
"Ref Deleted: project [%s] refname [%s] old object id [%s]",
event.getProjectName(), event.getRefName(), event.getOldObjectId()));
return true;
}
return false;
}
/**
* Is the event a non-fast-forward update?
*
* @param event the Event
* @return True if a non-fast-forward update, otherwise False.
*/
private boolean isNonFastForwardUpdate(Event event) {
// TODO
return false;
}
}