Example usage for org.eclipse.jgit.transport AdvertiseRefsHook AdvertiseRefsHook

List of usage examples for org.eclipse.jgit.transport AdvertiseRefsHook AdvertiseRefsHook

Introduction

In this page you can find the example usage for org.eclipse.jgit.transport AdvertiseRefsHook AdvertiseRefsHook.

Prototype

AdvertiseRefsHook

Source Link

Usage

From source file:com.google.gerrit.server.git.ReceiveCommits.java

License:Apache License

@Inject
ReceiveCommits(final ReviewDb db, final Provider<InternalChangeQuery> queryProvider,
        final SchemaFactory<ReviewDb> schemaFactory, final ChangeData.Factory changeDataFactory,
        final ChangeUpdate.Factory updateFactory, final AccountResolver accountResolver,
        final CmdLineParser.Factory optionParserFactory, final MergedSender.Factory mergedSenderFactory,
        final ReplacePatchSetSender.Factory replacePatchSetFactory, final GitReferenceUpdated gitRefUpdated,
        final PatchSetInfoFactory patchSetInfoFactory, final ChangeHooks hooks,
        final ApprovalsUtil approvalsUtil, final ApprovalCopier approvalCopier, final ChangeMessagesUtil cmUtil,
        final ProjectCache projectCache, final GitRepositoryManager repoManager, final TagCache tagCache,
        final AccountCache accountCache, final ChangeCache changeCache, final ChangesCollection changes,
        final ChangeInserter.Factory changeInserterFactory,
        final CommitValidators.Factory commitValidatorsFactory, @CanonicalWebUrl final String canonicalWebUrl,
        final WorkQueue workQueue, @ChangeUpdateExecutor ListeningExecutorService changeUpdateExector,
        final RequestScopePropagator requestScopePropagator, final ChangeIndexer indexer, final SshInfo sshInfo,
        final AllProjectsName allProjectsName, ReceiveConfig config,
        @Assisted final ProjectControl projectControl, @Assisted final Repository repo,
        final Provider<SubmoduleOp> subOpProvider, final Provider<Submit> submitProvider,
        final Provider<MergeOp> mergeOpProvider, final ChangeKindCache changeKindCache,
        final DynamicMap<ProjectConfigEntry> pluginConfigEntries, final NotesMigration notesMigration,
        final ChangeEditUtil editUtil) throws IOException {
    this.currentUser = (IdentifiedUser) projectControl.getCurrentUser();
    this.db = db;
    this.queryProvider = queryProvider;
    this.changeDataFactory = changeDataFactory;
    this.updateFactory = updateFactory;
    this.schemaFactory = schemaFactory;
    this.accountResolver = accountResolver;
    this.optionParserFactory = optionParserFactory;
    this.mergedSenderFactory = mergedSenderFactory;
    this.replacePatchSetFactory = replacePatchSetFactory;
    this.gitRefUpdated = gitRefUpdated;
    this.patchSetInfoFactory = patchSetInfoFactory;
    this.hooks = hooks;
    this.approvalsUtil = approvalsUtil;
    this.approvalCopier = approvalCopier;
    this.cmUtil = cmUtil;
    this.projectCache = projectCache;
    this.repoManager = repoManager;
    this.canonicalWebUrl = canonicalWebUrl;
    this.tagCache = tagCache;
    this.accountCache = accountCache;
    this.changes = changes;
    this.changeInserterFactory = changeInserterFactory;
    this.commitValidatorsFactory = commitValidatorsFactory;
    this.workQueue = workQueue;
    this.changeUpdateExector = changeUpdateExector;
    this.requestScopePropagator = requestScopePropagator;
    this.indexer = indexer;
    this.sshInfo = sshInfo;
    this.allProjectsName = allProjectsName;
    this.receiveConfig = config;
    this.changeKindCache = changeKindCache;

    this.projectControl = projectControl;
    this.labelTypes = projectControl.getLabelTypes();
    this.project = projectControl.getProject();
    this.repo = repo;
    this.rp = new ReceivePack(repo);
    this.rejectCommits = BanCommit.loadRejectCommitsMap(repo, rp.getRevWalk());

    this.subOpProvider = subOpProvider;
    this.submitProvider = submitProvider;
    this.mergeOpProvider = mergeOpProvider;
    this.pluginConfigEntries = pluginConfigEntries;
    this.notesMigration = notesMigration;

    this.editUtil = editUtil;

    this.messageSender = new ReceivePackMessageSender();

    ProjectState ps = projectControl.getProjectState();

    this.newChangeForAllNotInTarget = ps.isCreateNewChangeForAllNotInTarget();
    rp.setAllowCreates(true);/*from  w  w  w.  j a va 2  s. co m*/
    rp.setAllowDeletes(true);
    rp.setAllowNonFastForwards(true);
    rp.setCheckReceivedObjects(ps.getConfig().getCheckReceivedObjects());
    rp.setRefFilter(new RefFilter() {
        @Override
        public Map<String, Ref> filter(Map<String, Ref> refs) {
            Map<String, Ref> filteredRefs = Maps.newHashMapWithExpectedSize(refs.size());
            for (Map.Entry<String, Ref> e : refs.entrySet()) {
                String name = e.getKey();
                if (!name.startsWith(REFS_CHANGES) && !name.startsWith(RefNames.REFS_CACHE_AUTOMERGE)) {
                    filteredRefs.put(name, e.getValue());
                }
            }
            return filteredRefs;
        }
    });

    if (!projectControl.allRefsAreVisible()) {
        rp.setCheckReferencedObjectsAreReachable(config.checkReferencedObjectsAreReachable);
        rp.setAdvertiseRefsHook(new VisibleRefFilter(tagCache, changeCache, repo, projectControl, db, false));
    }
    List<AdvertiseRefsHook> advHooks = new ArrayList<>(3);
    advHooks.add(new AdvertiseRefsHook() {
        @Override
        public void advertiseRefs(BaseReceivePack rp) throws ServiceMayNotContinueException {
            allRefs = rp.getAdvertisedRefs();
            if (allRefs == null) {
                try {
                    allRefs = rp.getRepository().getRefDatabase().getRefs(ALL);
                } catch (ServiceMayNotContinueException e) {
                    throw e;
                } catch (IOException e) {
                    ServiceMayNotContinueException ex = new ServiceMayNotContinueException();
                    ex.initCause(e);
                    throw ex;
                }
            }
            rp.setAdvertisedRefs(allRefs, rp.getAdvertisedObjects());
        }

        @Override
        public void advertiseRefs(UploadPack uploadPack) {
        }
    });
    advHooks.add(rp.getAdvertiseRefsHook());
    advHooks.add(
            new ReceiveCommitsAdvertiseRefsHook(db, queryProvider, projectControl.getProject().getNameKey()));
    rp.setAdvertiseRefsHook(AdvertiseRefsHookChain.newChain(advHooks));
}