Search in sources :

Example 1 with Type

use of org.eclipse.jgit.transport.ReceiveCommand.Type in project gitblit by gitblit.

the class PatchsetReceivePack method updateReflog.

private void updateReflog(RefUpdate ru) {
    if (ru == null) {
        return;
    }
    ReceiveCommand.Type type = null;
    switch(ru.getResult()) {
        case NEW:
            type = Type.CREATE;
            break;
        case FAST_FORWARD:
            type = Type.UPDATE;
            break;
        case FORCED:
            type = Type.UPDATE_NONFASTFORWARD;
            break;
        default:
            LOGGER.error(MessageFormat.format("unexpected ref update type {0} for {1}", ru.getResult(), ru.getName()));
            return;
    }
    ReceiveCommand cmd = new ReceiveCommand(ru.getOldObjectId(), ru.getNewObjectId(), ru.getName(), type);
    RefLogUtils.updateRefLog(user, getRepository(), Arrays.asList(cmd));
}
Also used : ReceiveCommand(org.eclipse.jgit.transport.ReceiveCommand) Type(org.eclipse.jgit.transport.ReceiveCommand.Type)

Example 2 with Type

use of org.eclipse.jgit.transport.ReceiveCommand.Type in project gitblit by gitblit.

the class MirrorService method run.

@Override
public void run() {
    if (!isReady()) {
        return;
    }
    running.set(true);
    for (String repositoryName : repositoryManager.getRepositoryList()) {
        if (forceClose.get()) {
            break;
        }
        if (repositoryManager.isCollectingGarbage(repositoryName)) {
            logger.debug("mirror is skipping {} garbagecollection", repositoryName);
            continue;
        }
        RepositoryModel model = null;
        Repository repository = null;
        try {
            model = repositoryManager.getRepositoryModel(repositoryName);
            if (!model.isMirror && !model.isBare) {
                // repository must be a valid bare git mirror
                logger.debug("mirror is skipping {} !mirror !bare", repositoryName);
                continue;
            }
            repository = repositoryManager.getRepository(repositoryName);
            if (repository == null) {
                logger.warn(MessageFormat.format("MirrorExecutor is missing repository {0}?!?", repositoryName));
                continue;
            }
            // automatically repair (some) invalid fetch ref specs
            if (!repairAttempted.contains(repositoryName)) {
                repairAttempted.add(repositoryName);
                JGitUtils.repairFetchSpecs(repository);
            }
            // find the first mirror remote - there should only be one
            StoredConfig rc = repository.getConfig();
            RemoteConfig mirror = null;
            List<RemoteConfig> configs = RemoteConfig.getAllRemoteConfigs(rc);
            for (RemoteConfig config : configs) {
                if (config.isMirror()) {
                    mirror = config;
                    break;
                }
            }
            if (mirror == null) {
                // repository does not have a mirror remote
                logger.debug("mirror is skipping {} no mirror remote found", repositoryName);
                continue;
            }
            logger.debug("checking {} remote {} for ref updates", repositoryName, mirror.getName());
            final boolean testing = false;
            Git git = new Git(repository);
            FetchResult result = git.fetch().setRemote(mirror.getName()).setDryRun(testing).call();
            Collection<TrackingRefUpdate> refUpdates = result.getTrackingRefUpdates();
            if (refUpdates.size() > 0) {
                ReceiveCommand ticketBranchCmd = null;
                for (TrackingRefUpdate ru : refUpdates) {
                    StringBuilder sb = new StringBuilder();
                    sb.append("updated mirror ");
                    sb.append(repositoryName);
                    sb.append(" ");
                    sb.append(ru.getRemoteName());
                    sb.append(" -> ");
                    sb.append(ru.getLocalName());
                    if (ru.getResult() == Result.FORCED) {
                        sb.append(" (forced)");
                    }
                    sb.append(" ");
                    sb.append(ru.getOldObjectId() == null ? "" : ru.getOldObjectId().abbreviate(7).name());
                    sb.append("..");
                    sb.append(ru.getNewObjectId() == null ? "" : ru.getNewObjectId().abbreviate(7).name());
                    logger.info(sb.toString());
                    if (BranchTicketService.BRANCH.equals(ru.getLocalName())) {
                        ReceiveCommand.Type type = null;
                        switch(ru.getResult()) {
                            case NEW:
                                type = Type.CREATE;
                                break;
                            case FAST_FORWARD:
                                type = Type.UPDATE;
                                break;
                            case FORCED:
                                type = Type.UPDATE_NONFASTFORWARD;
                                break;
                            default:
                                type = null;
                                break;
                        }
                        if (type != null) {
                            ticketBranchCmd = new ReceiveCommand(ru.getOldObjectId(), ru.getNewObjectId(), ru.getLocalName(), type);
                        }
                    }
                }
                if (ticketBranchCmd != null) {
                    repository.fireEvent(new ReceiveCommandEvent(model, ticketBranchCmd));
                }
            }
        } catch (Exception e) {
            logger.error("Error updating mirror " + repositoryName, e);
        } finally {
            // cleanup
            if (repository != null) {
                repository.close();
            }
        }
    }
    running.set(false);
}
Also used : ReceiveCommand(org.eclipse.jgit.transport.ReceiveCommand) FetchResult(org.eclipse.jgit.transport.FetchResult) RepositoryModel(com.gitblit.models.RepositoryModel) TrackingRefUpdate(org.eclipse.jgit.transport.TrackingRefUpdate) Type(org.eclipse.jgit.transport.ReceiveCommand.Type) StoredConfig(org.eclipse.jgit.lib.StoredConfig) Repository(org.eclipse.jgit.lib.Repository) Git(org.eclipse.jgit.api.Git) ReceiveCommandEvent(com.gitblit.git.ReceiveCommandEvent) RemoteConfig(org.eclipse.jgit.transport.RemoteConfig)

Aggregations

ReceiveCommand (org.eclipse.jgit.transport.ReceiveCommand)2 Type (org.eclipse.jgit.transport.ReceiveCommand.Type)2 ReceiveCommandEvent (com.gitblit.git.ReceiveCommandEvent)1 RepositoryModel (com.gitblit.models.RepositoryModel)1 Git (org.eclipse.jgit.api.Git)1 Repository (org.eclipse.jgit.lib.Repository)1 StoredConfig (org.eclipse.jgit.lib.StoredConfig)1 FetchResult (org.eclipse.jgit.transport.FetchResult)1 RemoteConfig (org.eclipse.jgit.transport.RemoteConfig)1 TrackingRefUpdate (org.eclipse.jgit.transport.TrackingRefUpdate)1