/*
* Copyright 2013 gitblit.com.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.git;
import static org.eclipse.jgit.transport.BasePackPushConnection.CAPABILITY_SIDE_BAND_64K;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.lib.ProgressMonitor;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevSort;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.transport.ReceiveCommand;
import org.eclipse.jgit.transport.ReceiveCommand.Result;
import org.eclipse.jgit.transport.ReceiveCommand.Type;
import org.eclipse.jgit.transport.ReceivePack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.Constants;
import com.gitblit.Keys;
import com.gitblit.extensions.PatchsetHook;
import com.gitblit.manager.IGitblit;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.TicketModel;
import com.gitblit.models.TicketModel.Change;
import com.gitblit.models.TicketModel.Field;
import com.gitblit.models.TicketModel.Patchset;
import com.gitblit.models.TicketModel.PatchsetType;
import com.gitblit.models.TicketModel.Status;
import com.gitblit.models.UserModel;
import com.gitblit.tickets.BranchTicketService;
import com.gitblit.tickets.ITicketService;
import com.gitblit.tickets.TicketMilestone;
import com.gitblit.tickets.TicketNotifier;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.DiffUtils;
import com.gitblit.utils.DiffUtils.DiffStat;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.MergeResult;
import com.gitblit.utils.JGitUtils.MergeStatus;
import com.gitblit.utils.RefLogUtils;
import com.gitblit.utils.StringUtils;
import com.google.common.collect.Lists;
/**
* PatchsetReceivePack processes receive commands and allows for creating, updating,
* and closing Gitblit tickets. It also executes Groovy pre- and post- receive
* hooks.
*
* The patchset mechanism defined in this class is based on the ReceiveCommits class
* from the Gerrit code review server.
*
* The general execution flow is:
*
* onPreReceive()
* executeCommands()
* onPostReceive()
*
*
* @author Android Open Source Project
* @author James Moger
*
*/
public class PatchsetReceivePack extends GitblitReceivePack {
protected static final List MAGIC_REFS = Arrays.asList(Constants.R_FOR, Constants.R_TICKET);
protected static final Pattern NEW_PATCHSET =
Pattern.compile("^refs/tickets/(?:[0-9a-zA-Z][0-9a-zA-Z]/)?([1-9][0-9]*)(?:/new)?$");
private static final Logger LOGGER = LoggerFactory.getLogger(PatchsetReceivePack.class);
protected final ITicketService ticketService;
protected final TicketNotifier ticketNotifier;
private boolean requireMergeablePatchset;
public PatchsetReceivePack(IGitblit gitblit, Repository db, RepositoryModel repository, UserModel user) {
super(gitblit, db, repository, user);
this.ticketService = gitblit.getTicketService();
this.ticketNotifier = ticketService.createNotifier();
}
/** Returns the patchset ref root from the ref */
private String getPatchsetRef(String refName) {
for (String patchRef : MAGIC_REFS) {
if (refName.startsWith(patchRef)) {
return patchRef;
}
}
return null;
}
/** Checks if the supplied ref name is a patchset ref */
private boolean isPatchsetRef(String refName) {
return !StringUtils.isEmpty(getPatchsetRef(refName));
}
/** Checks if the supplied ref name is a change ref */
private boolean isTicketRef(String refName) {
return refName.startsWith(Constants.R_TICKETS_PATCHSETS);
}
/** Extracts the integration branch from the ref name */
private String getIntegrationBranch(String refName) {
String patchsetRef = getPatchsetRef(refName);
String branch = refName.substring(patchsetRef.length());
if (branch.indexOf('%') > -1) {
branch = branch.substring(0, branch.indexOf('%'));
}
String defaultBranch = "master";
try {
defaultBranch = getRepository().getBranch();
} catch (Exception e) {
LOGGER.error("failed to determine default branch for " + repository.name, e);
}
if (!StringUtils.isEmpty(getRepositoryModel().mergeTo)) {
// repository settings specifies a default integration branch
defaultBranch = Repository.shortenRefName(getRepositoryModel().mergeTo);
}
long ticketId = 0L;
try {
ticketId = Long.parseLong(branch);
} catch (Exception e) {
// not a number
}
if (ticketId > 0 || branch.equalsIgnoreCase("default") || branch.equalsIgnoreCase("new")) {
return defaultBranch;
}
return branch;
}
/** Extracts the ticket id from the ref name */
private long getTicketId(String refName) {
if (refName.indexOf('%') > -1) {
refName = refName.substring(0, refName.indexOf('%'));
}
if (refName.startsWith(Constants.R_FOR)) {
String ref = refName.substring(Constants.R_FOR.length());
try {
return Long.parseLong(ref);
} catch (Exception e) {
// not a number
}
} else if (refName.startsWith(Constants.R_TICKET) ||
refName.startsWith(Constants.R_TICKETS_PATCHSETS)) {
return PatchsetCommand.getTicketNumber(refName);
}
return 0L;
}
/** Returns true if the ref namespace exists */
private boolean hasRefNamespace(String ref) {
Map blockingFors;
try {
blockingFors = getRepository().getRefDatabase().getRefs(ref);
} catch (IOException err) {
sendError("Cannot scan refs in {0}", repository.name);
LOGGER.error("Error!", err);
return true;
}
if (!blockingFors.isEmpty()) {
sendError("{0} needs the following refs removed to receive patchsets: {1}",
repository.name, blockingFors.keySet());
return true;
}
return false;
}
/** Removes change ref receive commands */
private List excludeTicketCommands(Collection commands) {
List filtered = new ArrayList();
for (ReceiveCommand cmd : commands) {
if (!isTicketRef(cmd.getRefName())) {
// this is not a ticket ref update
filtered.add(cmd);
}
}
return filtered;
}
/** Removes patchset receive commands for pre- and post- hook integrations */
private List excludePatchsetCommands(Collection commands) {
List filtered = new ArrayList();
for (ReceiveCommand cmd : commands) {
if (!isPatchsetRef(cmd.getRefName())) {
// this is a non-patchset ref update
filtered.add(cmd);
}
}
return filtered;
}
/** Process receive commands EXCEPT for Patchset commands. */
@Override
public void onPreReceive(ReceivePack rp, Collection commands) {
Collection filtered = excludePatchsetCommands(commands);
super.onPreReceive(rp, filtered);
}
/** Process receive commands EXCEPT for Patchset commands. */
@Override
public void onPostReceive(ReceivePack rp, Collection commands) {
Collection filtered = excludePatchsetCommands(commands);
super.onPostReceive(rp, filtered);
// send all queued ticket notifications after processing all patchsets
ticketNotifier.sendAll();
}
@Override
protected void validateCommands() {
// workaround for JGit's awful scoping choices
//
// set the patchset refs to OK to bypass checks in the super implementation
for (final ReceiveCommand cmd : filterCommands(Result.NOT_ATTEMPTED)) {
if (isPatchsetRef(cmd.getRefName())) {
if (cmd.getType() == ReceiveCommand.Type.CREATE) {
cmd.setResult(Result.OK);
}
}
}
super.validateCommands();
}
/** Execute commands to update references. */
@Override
protected void executeCommands() {
// we process patchsets unless the user is pushing something special
boolean processPatchsets = true;
for (ReceiveCommand cmd : filterCommands(Result.NOT_ATTEMPTED)) {
if (ticketService instanceof BranchTicketService
&& BranchTicketService.BRANCH.equals(cmd.getRefName())) {
// the user is pushing an update to the BranchTicketService data
processPatchsets = false;
}
}
// workaround for JGit's awful scoping choices
//
// reset the patchset refs to NOT_ATTEMPTED (see validateCommands)
for (ReceiveCommand cmd : filterCommands(Result.OK)) {
if (isPatchsetRef(cmd.getRefName())) {
cmd.setResult(Result.NOT_ATTEMPTED);
} else if (ticketService instanceof BranchTicketService
&& BranchTicketService.BRANCH.equals(cmd.getRefName())) {
// the user is pushing an update to the BranchTicketService data
processPatchsets = false;
}
}
List toApply = filterCommands(Result.NOT_ATTEMPTED);
if (toApply.isEmpty()) {
return;
}
ProgressMonitor updating = NullProgressMonitor.INSTANCE;
boolean sideBand = isCapabilityEnabled(CAPABILITY_SIDE_BAND_64K);
if (sideBand) {
SideBandProgressMonitor pm = new SideBandProgressMonitor(msgOut);
pm.setDelayStart(250, TimeUnit.MILLISECONDS);
updating = pm;
}
BatchRefUpdate batch = getRepository().getRefDatabase().newBatchUpdate();
batch.setAllowNonFastForwards(isAllowNonFastForwards());
batch.setRefLogIdent(getRefLogIdent());
batch.setRefLogMessage("push", true);
ReceiveCommand patchsetRefCmd = null;
PatchsetCommand patchsetCmd = null;
for (ReceiveCommand cmd : toApply) {
if (Result.NOT_ATTEMPTED != cmd.getResult()) {
// Already rejected by the core receive process.
continue;
}
if (isPatchsetRef(cmd.getRefName()) && processPatchsets) {
if (ticketService == null) {
sendRejection(cmd, "Sorry, the ticket service is unavailable and can not accept patchsets at this time.");
continue;
}
if (!ticketService.isReady()) {
sendRejection(cmd, "Sorry, the ticket service can not accept patchsets at this time.");
continue;
}
if (UserModel.ANONYMOUS.equals(user)) {
// server allows anonymous pushes, but anonymous patchset
// contributions are prohibited by design
sendRejection(cmd, "Sorry, anonymous patchset contributions are prohibited.");
continue;
}
final Matcher m = NEW_PATCHSET.matcher(cmd.getRefName());
if (m.matches()) {
// prohibit pushing directly to a patchset ref
long id = getTicketId(cmd.getRefName());
sendError("You may not directly push directly to a patchset ref!");
sendError("Instead, please push to one the following:");
sendError(" - {0}{1,number,0}", Constants.R_FOR, id);
sendError(" - {0}{1,number,0}", Constants.R_TICKET, id);
sendRejection(cmd, "protected ref");
continue;
}
if (hasRefNamespace(Constants.R_FOR)) {
// the refs/for/ namespace exists and it must not
LOGGER.error("{} already has refs in the {} namespace",
repository.name, Constants.R_FOR);
sendRejection(cmd, "Sorry, a repository administrator will have to remove the {} namespace", Constants.R_FOR);
continue;
}
if (cmd.getNewId().equals(ObjectId.zeroId())) {
// ref deletion request
if (cmd.getRefName().startsWith(Constants.R_TICKET)) {
if (user.canDeleteRef(repository)) {
batch.addCommand(cmd);
} else {
sendRejection(cmd, "Sorry, you do not have permission to delete {}", cmd.getRefName());
}
} else {
sendRejection(cmd, "Sorry, you can not delete {}", cmd.getRefName());
}
continue;
}
if (patchsetRefCmd != null) {
sendRejection(cmd, "You may only push one patchset at a time.");
continue;
}
LOGGER.info(MessageFormat.format("Verifying {0} push ref \"{1}\" received from {2}",
repository.name, cmd.getRefName(), user.username));
// responsible verification
String responsible = PatchsetCommand.getSingleOption(cmd, PatchsetCommand.RESPONSIBLE);
if (!StringUtils.isEmpty(responsible)) {
UserModel assignee = gitblit.getUserModel(responsible);
if (assignee == null) {
// no account by this name
sendRejection(cmd, "{0} can not be assigned any tickets because there is no user account by that name", responsible);
continue;
} else if (!assignee.canPush(repository)) {
// account does not have RW permissions
sendRejection(cmd, "{0} ({1}) can not be assigned any tickets because the user does not have RW permissions for {2}",
assignee.getDisplayName(), assignee.username, repository.name);
continue;
}
}
// milestone verification
String milestone = PatchsetCommand.getSingleOption(cmd, PatchsetCommand.MILESTONE);
if (!StringUtils.isEmpty(milestone)) {
TicketMilestone milestoneModel = ticketService.getMilestone(repository, milestone);
if (milestoneModel == null) {
// milestone does not exist
sendRejection(cmd, "Sorry, \"{0}\" is not a valid milestone!", milestone);
continue;
}
}
// watcher verification
List watchers = PatchsetCommand.getOptions(cmd, PatchsetCommand.WATCH);
if (!ArrayUtils.isEmpty(watchers)) {
boolean verified = true;
for (String watcher : watchers) {
UserModel user = gitblit.getUserModel(watcher);
if (user == null) {
// watcher does not exist
sendRejection(cmd, "Sorry, \"{0}\" is not a valid username for the watch list!", watcher);
verified = false;
break;
}
}
if (!verified) {
continue;
}
}
patchsetRefCmd = cmd;
patchsetCmd = preparePatchset(cmd);
if (patchsetCmd != null) {
batch.addCommand(patchsetCmd);
}
continue;
}
batch.addCommand(cmd);
}
if (!batch.getCommands().isEmpty()) {
try {
batch.execute(getRevWalk(), updating);
} catch (IOException err) {
for (ReceiveCommand cmd : toApply) {
if (cmd.getResult() == Result.NOT_ATTEMPTED) {
sendRejection(cmd, "lock error: {0}", err.getMessage());
LOGGER.error(MessageFormat.format("failed to lock {0}:{1}",
repository.name, cmd.getRefName()), err);
}
}
}
}
//
// set the results into the patchset ref receive command
//
if (patchsetRefCmd != null && patchsetCmd != null) {
if (!patchsetCmd.getResult().equals(Result.OK)) {
// patchset command failed!
LOGGER.error(patchsetCmd.getType() + " " + patchsetCmd.getRefName()
+ " " + patchsetCmd.getResult());
patchsetRefCmd.setResult(patchsetCmd.getResult(), patchsetCmd.getMessage());
} else {
// all patchset commands were applied
patchsetRefCmd.setResult(Result.OK);
// update the ticket branch ref
RefUpdate ru = updateRef(
patchsetCmd.getTicketBranch(),
patchsetCmd.getNewId(),
patchsetCmd.getPatchsetType());
updateReflog(ru);
TicketModel ticket = processPatchset(patchsetCmd);
if (ticket != null) {
ticketNotifier.queueMailing(ticket);
}
}
}
//
// if there are standard ref update receive commands that were
// successfully processed, process referenced tickets, if any
//
List allUpdates = ReceiveCommand.filter(batch.getCommands(), Result.OK);
List refUpdates = excludePatchsetCommands(allUpdates);
List stdUpdates = excludeTicketCommands(refUpdates);
if (!stdUpdates.isEmpty()) {
int ticketsProcessed = 0;
for (ReceiveCommand cmd : stdUpdates) {
switch (cmd.getType()) {
case CREATE:
case UPDATE:
case UPDATE_NONFASTFORWARD:
if (cmd.getRefName().startsWith(Constants.R_HEADS)) {
Collection tickets = processMergedTickets(cmd);
ticketsProcessed += tickets.size();
for (TicketModel ticket : tickets) {
ticketNotifier.queueMailing(ticket);
}
}
break;
default:
break;
}
}
if (ticketsProcessed == 1) {
sendInfo("1 ticket updated");
} else if (ticketsProcessed > 1) {
sendInfo("{0} tickets updated", ticketsProcessed);
}
}
// reset the ticket caches for the repository
ticketService.resetCaches(repository);
}
/**
* Prepares a patchset command.
*
* @param cmd
* @return the patchset command
*/
private PatchsetCommand preparePatchset(ReceiveCommand cmd) {
String branch = getIntegrationBranch(cmd.getRefName());
long number = getTicketId(cmd.getRefName());
TicketModel ticket = null;
if (number > 0 && ticketService.hasTicket(repository, number)) {
ticket = ticketService.getTicket(repository, number);
}
if (ticket == null) {
if (number > 0) {
// requested ticket does not exist
sendError("Sorry, {0} does not have ticket {1,number,0}!", repository.name, number);
sendRejection(cmd, "Invalid ticket number");
return null;
}
} else {
if (ticket.isMerged()) {
// ticket already merged & resolved
Change mergeChange = null;
for (Change change : ticket.changes) {
if (change.isMerge()) {
mergeChange = change;
break;
}
}
if (mergeChange != null) {
sendError("Sorry, {0} already merged {1} from ticket {2,number,0} to {3}!",
mergeChange.author, mergeChange.patchset, number, ticket.mergeTo);
}
sendRejection(cmd, "Ticket {0,number,0} already resolved", number);
return null;
} else if (!StringUtils.isEmpty(ticket.mergeTo)) {
// ticket specifies integration branch
branch = ticket.mergeTo;
}
}
final int shortCommitIdLen = settings.getInteger(Keys.web.shortCommitIdLength, 6);
final String shortTipId = cmd.getNewId().getName().substring(0, shortCommitIdLen);
final RevCommit tipCommit = JGitUtils.getCommit(getRepository(), cmd.getNewId().getName());
final String forBranch = branch;
RevCommit mergeBase = null;
Ref forBranchRef = getAdvertisedRefs().get(Constants.R_HEADS + forBranch);
if (forBranchRef == null || forBranchRef.getObjectId() == null) {
// unknown integration branch
sendError("Sorry, there is no integration branch named ''{0}''.", forBranch);
sendRejection(cmd, "Invalid integration branch specified");
return null;
} else {
// determine the merge base for the patchset on the integration branch
String base = JGitUtils.getMergeBase(getRepository(), forBranchRef.getObjectId(), tipCommit.getId());
if (StringUtils.isEmpty(base)) {
sendError("");
sendError("There is no common ancestry between {0} and {1}.", forBranch, shortTipId);
sendError("Please reconsider your proposed integration branch, {0}.", forBranch);
sendError("");
sendRejection(cmd, "no merge base for patchset and {0}", forBranch);
return null;
}
mergeBase = JGitUtils.getCommit(getRepository(), base);
}
// ensure that the patchset can be cleanly merged right now
MergeStatus status = JGitUtils.canMerge(getRepository(), tipCommit.getName(), forBranch);
switch (status) {
case ALREADY_MERGED:
sendError("");
sendError("You have already merged this patchset.", forBranch);
sendError("");
sendRejection(cmd, "everything up-to-date");
return null;
case MERGEABLE:
break;
default:
if (ticket == null || requireMergeablePatchset) {
sendError("");
sendError("Your patchset can not be cleanly merged into {0}.", forBranch);
sendError("Please rebase your patchset and push again.");
sendError("NOTE:", number);
sendError("You should push your rebase to refs/for/{0,number,0}", number);
sendError("");
sendError(" git push origin HEAD:refs/for/{0,number,0}", number);
sendError("");
sendRejection(cmd, "patchset not mergeable");
return null;
}
}
// check to see if this commit is already linked to a ticket
long id = identifyTicket(tipCommit, false);
if (id > 0) {
sendError("{0} has already been pushed to ticket {1,number,0}.", shortTipId, id);
sendRejection(cmd, "everything up-to-date");
return null;
}
PatchsetCommand psCmd;
if (ticket == null) {
/*
* NEW TICKET
*/
Patchset patchset = newPatchset(null, mergeBase.getName(), tipCommit.getName());
int minLength = 10;
int maxLength = 100;
String minTitle = MessageFormat.format(" minimum length of a title is {0} characters.", minLength);
String maxTitle = MessageFormat.format(" maximum length of a title is {0} characters.", maxLength);
if (patchset.commits > 1) {
sendError("");
sendError("You may not create a ''{0}'' branch proposal ticket from {1} commits!",
forBranch, patchset.commits);
sendError("");
// display an ellipsized log of the commits being pushed
RevWalk walk = getRevWalk();
walk.reset();
walk.sort(RevSort.TOPO);
int boundary = 3;
int count = 0;
try {
walk.markStart(tipCommit);
walk.markUninteresting(mergeBase);
for (;;) {
RevCommit c = walk.next();
if (c == null) {
break;
}
if (count < boundary || count >= (patchset.commits - boundary)) {
walk.parseBody(c);
sendError(" {0} {1}", c.getName().substring(0, shortCommitIdLen),
StringUtils.trimString(c.getShortMessage(), 60));
} else if (count == boundary) {
sendError(" ... more commits ...");
}
count++;
}
} catch (IOException e) {
// Should never happen, the core receive process would have
// identified the missing object earlier before we got control.
LOGGER.error("failed to get commit count", e);
} finally {
walk.release();
}
sendError("");
sendError("Possible Solutions:");
sendError("");
int solution = 1;
String forSpec = cmd.getRefName().substring(Constants.R_FOR.length());
if (forSpec.equals("default") || forSpec.equals("new")) {
try {
// determine other possible integration targets
List bases = Lists.newArrayList();
for (Ref ref : getRepository().getRefDatabase().getRefs(Constants.R_HEADS).values()) {
if (!ref.getName().startsWith(Constants.R_TICKET)
&& !ref.getName().equals(forBranchRef.getName())) {
if (JGitUtils.isMergedInto(getRepository(), ref.getObjectId(), tipCommit)) {
bases.add(Repository.shortenRefName(ref.getName()));
}
}
}
if (!bases.isEmpty()) {
if (bases.size() == 1) {
// suggest possible integration targets
String base = bases.get(0);
sendError("{0}. Propose this change for the ''{1}'' branch.", solution++, base);
sendError("");
sendError(" git push origin HEAD:refs/for/{0}", base);
sendError(" pt propose {0}", base);
sendError("");
} else {
// suggest possible integration targets
sendError("{0}. Propose this change for a different branch.", solution++);
sendError("");
for (String base : bases) {
sendError(" git push origin HEAD:refs/for/{0}", base);
sendError(" pt propose {0}", base);
sendError("");
}
}
}
} catch (IOException e) {
LOGGER.error(null, e);
}
}
sendError("{0}. Squash your changes into a single commit with a meaningful message.", solution++);
sendError("");
sendError("{0}. Open a ticket for your changes and then push your {1} commits to the ticket.",
solution++, patchset.commits);
sendError("");
sendError(" git push origin HEAD:refs/for/{id}");
sendError(" pt propose {id}");
sendError("");
sendRejection(cmd, "too many commits");
return null;
}
// require a reasonable title/subject
String title = tipCommit.getFullMessage().trim().split("\n")[0];
if (title.length() < minLength) {
// reject, title too short
sendError("");
sendError("Please supply a longer title in your commit message!");
sendError("");
sendError(minTitle);
sendError(maxTitle);
sendError("");
sendRejection(cmd, "ticket title is too short [{0}/{1}]", title.length(), maxLength);
return null;
}
if (title.length() > maxLength) {
// reject, title too long
sendError("");
sendError("Please supply a more concise title in your commit message!");
sendError("");
sendError(minTitle);
sendError(maxTitle);
sendError("");
sendRejection(cmd, "ticket title is too long [{0}/{1}]", title.length(), maxLength);
return null;
}
// assign new id
long ticketId = ticketService.assignNewId(repository);
// create the patchset command
psCmd = new PatchsetCommand(user.username, patchset);
psCmd.newTicket(tipCommit, forBranch, ticketId, cmd.getRefName());
} else {
/*
* EXISTING TICKET
*/
Patchset patchset = newPatchset(ticket, mergeBase.getName(), tipCommit.getName());
psCmd = new PatchsetCommand(user.username, patchset);
psCmd.updateTicket(tipCommit, forBranch, ticket, cmd.getRefName());
}
// confirm user can push the patchset
boolean pushPermitted = ticket == null
|| !ticket.hasPatchsets()
|| ticket.isAuthor(user.username)
|| ticket.isPatchsetAuthor(user.username)
|| ticket.isResponsible(user.username)
|| user.canPush(repository);
switch (psCmd.getPatchsetType()) {
case Proposal:
// proposals (first patchset) are always acceptable
break;
case FastForward:
// patchset updates must be permitted
if (!pushPermitted) {
// reject
sendError("");
sendError("To push a patchset to this ticket one of the following must be true:");
sendError(" 1. you created the ticket");
sendError(" 2. you created the first patchset");
sendError(" 3. you are specified as responsible for the ticket");
sendError(" 4. you have push (RW) permissions to {0}", repository.name);
sendError("");
sendRejection(cmd, "not permitted to push to ticket {0,number,0}", ticket.number);
return null;
}
break;
default:
// non-fast-forward push
if (!pushPermitted) {
// reject
sendRejection(cmd, "non-fast-forward ({0})", psCmd.getPatchsetType());
return null;
}
break;
}
return psCmd;
}
/**
* Creates or updates an ticket with the specified patchset.
*
* @param cmd
* @return a ticket if the creation or update was successful
*/
private TicketModel processPatchset(PatchsetCommand cmd) {
Change change = cmd.getChange();
if (cmd.isNewTicket()) {
// create the ticket object
TicketModel ticket = ticketService.createTicket(repository, cmd.getTicketId(), change);
if (ticket != null) {
sendInfo("");
sendHeader("#{0,number,0}: {1}", ticket.number, StringUtils.trimString(ticket.title, Constants.LEN_SHORTLOG));
sendInfo("created proposal ticket from patchset");
sendInfo(ticketService.getTicketUrl(ticket));
sendInfo("");
// log the new patch ref
RefLogUtils.updateRefLog(user, getRepository(),
Arrays.asList(new ReceiveCommand(cmd.getOldId(), cmd.getNewId(), cmd.getRefName())));
// call any patchset hooks
for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
try {
hook.onNewPatchset(ticket);
} catch (Exception e) {
LOGGER.error("Failed to execute extension", e);
}
}
return ticket;
} else {
sendError("FAILED to create ticket");
}
} else {
// update an existing ticket
TicketModel ticket = ticketService.updateTicket(repository, cmd.getTicketId(), change);
if (ticket != null) {
sendInfo("");
sendHeader("#{0,number,0}: {1}", ticket.number, StringUtils.trimString(ticket.title, Constants.LEN_SHORTLOG));
if (change.patchset.rev == 1) {
// new patchset
sendInfo("uploaded patchset {0} ({1})", change.patchset.number, change.patchset.type.toString());
} else {
// updated patchset
sendInfo("added {0} {1} to patchset {2}",
change.patchset.added,
change.patchset.added == 1 ? "commit" : "commits",
change.patchset.number);
}
sendInfo(ticketService.getTicketUrl(ticket));
sendInfo("");
// log the new patchset ref
RefLogUtils.updateRefLog(user, getRepository(),
Arrays.asList(new ReceiveCommand(cmd.getOldId(), cmd.getNewId(), cmd.getRefName())));
// call any patchset hooks
final boolean isNewPatchset = change.patchset.rev == 1;
for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
try {
if (isNewPatchset) {
hook.onNewPatchset(ticket);
} else {
hook.onUpdatePatchset(ticket);
}
} catch (Exception e) {
LOGGER.error("Failed to execute extension", e);
}
}
// return the updated ticket
return ticket;
} else {
sendError("FAILED to upload {0} for ticket {1,number,0}", change.patchset, cmd.getTicketId());
}
}
return null;
}
/**
* Automatically closes open tickets that have been merged to their integration
* branch by a client.
*
* @param cmd
*/
private Collection processMergedTickets(ReceiveCommand cmd) {
Map mergedTickets = new LinkedHashMap();
final RevWalk rw = getRevWalk();
try {
rw.reset();
rw.markStart(rw.parseCommit(cmd.getNewId()));
if (!ObjectId.zeroId().equals(cmd.getOldId())) {
rw.markUninteresting(rw.parseCommit(cmd.getOldId()));
}
RevCommit c;
while ((c = rw.next()) != null) {
rw.parseBody(c);
long ticketNumber = identifyTicket(c, true);
if (ticketNumber == 0L || mergedTickets.containsKey(ticketNumber)) {
continue;
}
TicketModel ticket = ticketService.getTicket(repository, ticketNumber);
if (ticket == null) {
continue;
}
String integrationBranch;
if (StringUtils.isEmpty(ticket.mergeTo)) {
// unspecified integration branch
integrationBranch = null;
} else {
// specified integration branch
integrationBranch = Constants.R_HEADS + ticket.mergeTo;
}
// ticket must be open and, if specified, the ref must match the integration branch
if (ticket.isClosed() || (integrationBranch != null && !integrationBranch.equals(cmd.getRefName()))) {
continue;
}
String baseRef = PatchsetCommand.getBasePatchsetBranch(ticket.number);
boolean knownPatchset = false;
Set[ refs = getRepository().getAllRefsByPeeledObjectId().get(c.getId());
if (refs != null) {
for (Ref ref : refs) {
if (ref.getName().startsWith(baseRef)) {
knownPatchset = true;
break;
}
}
}
String mergeSha = c.getName();
String mergeTo = Repository.shortenRefName(cmd.getRefName());
Change change;
Patchset patchset;
if (knownPatchset) {
// identify merged patchset by the patchset tip
patchset = null;
for (Patchset ps : ticket.getPatchsets()) {
if (ps.tip.equals(mergeSha)) {
patchset = ps;
break;
}
}
if (patchset == null) {
// should not happen - unless ticket has been hacked
sendError("Failed to find the patchset for {0} in ticket {1,number,0}?!",
mergeSha, ticket.number);
continue;
}
// create a new change
change = new Change(user.username);
} else {
// new patchset pushed by user
String base = cmd.getOldId().getName();
patchset = newPatchset(ticket, base, mergeSha);
PatchsetCommand psCmd = new PatchsetCommand(user.username, patchset);
psCmd.updateTicket(c, mergeTo, ticket, null);
// create a ticket patchset ref
updateRef(psCmd.getPatchsetBranch(), c.getId(), patchset.type);
RefUpdate ru = updateRef(psCmd.getTicketBranch(), c.getId(), patchset.type);
updateReflog(ru);
// create a change from the patchset command
change = psCmd.getChange();
}
// set the common change data about the merge
change.setField(Field.status, Status.Merged);
change.setField(Field.mergeSha, mergeSha);
change.setField(Field.mergeTo, mergeTo);
if (StringUtils.isEmpty(ticket.responsible)) {
// unassigned tickets are assigned to the closer
change.setField(Field.responsible, user.username);
}
ticket = ticketService.updateTicket(repository, ticket.number, change);
if (ticket != null) {
sendInfo("");
sendHeader("#{0,number,0}: {1}", ticket.number, StringUtils.trimString(ticket.title, Constants.LEN_SHORTLOG));
sendInfo("closed by push of {0} to {1}", patchset, mergeTo);
sendInfo(ticketService.getTicketUrl(ticket));
sendInfo("");
mergedTickets.put(ticket.number, ticket);
} else {
String shortid = mergeSha.substring(0, settings.getInteger(Keys.web.shortCommitIdLength, 6));
sendError("FAILED to close ticket {0,number,0} by push of {1}", ticketNumber, shortid);
}
}
} catch (IOException e) {
LOGGER.error("Can't scan for changes to close", e);
} finally {
rw.reset();
}
return mergedTickets.values();
}
/**
* Try to identify a ticket id from the commit.
*
* @param commit
* @param parseMessage
* @return a ticket id or 0
*/
private long identifyTicket(RevCommit commit, boolean parseMessage) {
// try lookup by change ref
Map]> map = getRepository().getAllRefsByPeeledObjectId();
Set[ refs = map.get(commit.getId());
if (!ArrayUtils.isEmpty(refs)) {
for (Ref ref : refs) {
long number = PatchsetCommand.getTicketNumber(ref.getName());
if (number > 0) {
return number;
}
}
}
if (parseMessage) {
// parse commit message looking for fixes/closes #n
String dx = "(?:fixes|closes)[\\s-]+#?(\\d+)";
String x = settings.getString(Keys.tickets.closeOnPushCommitMessageRegex, dx);
if (StringUtils.isEmpty(x)) {
x = dx;
}
try {
Pattern p = Pattern.compile(x, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(commit.getFullMessage());
while (m.find()) {
String val = m.group(1);
return Long.parseLong(val);
}
} catch (Exception e) {
LOGGER.error(String.format("Failed to parse \"%s\" in commit %s", x, commit.getName()), e);
}
}
return 0L;
}
private int countCommits(String baseId, String tipId) {
int count = 0;
RevWalk walk = getRevWalk();
walk.reset();
walk.sort(RevSort.TOPO);
walk.sort(RevSort.REVERSE, true);
try {
RevCommit tip = walk.parseCommit(getRepository().resolve(tipId));
RevCommit base = walk.parseCommit(getRepository().resolve(baseId));
walk.markStart(tip);
walk.markUninteresting(base);
for (;;) {
RevCommit c = walk.next();
if (c == null) {
break;
}
count++;
}
} catch (IOException e) {
// Should never happen, the core receive process would have
// identified the missing object earlier before we got control.
LOGGER.error("failed to get commit count", e);
return 0;
} finally {
walk.release();
}
return count;
}
/**
* Creates a new patchset with metadata.
*
* @param ticket
* @param mergeBase
* @param tip
*/
private Patchset newPatchset(TicketModel ticket, String mergeBase, String tip) {
int totalCommits = countCommits(mergeBase, tip);
Patchset newPatchset = new Patchset();
newPatchset.tip = tip;
newPatchset.base = mergeBase;
newPatchset.commits = totalCommits;
Patchset currPatchset = ticket == null ? null : ticket.getCurrentPatchset();
if (currPatchset == null) {
/*
* PROPOSAL PATCHSET
* patchset 1, rev 1
*/
newPatchset.number = 1;
newPatchset.rev = 1;
newPatchset.type = PatchsetType.Proposal;
// diffstat from merge base
DiffStat diffStat = DiffUtils.getDiffStat(getRepository(), mergeBase, tip);
newPatchset.insertions = diffStat.getInsertions();
newPatchset.deletions = diffStat.getDeletions();
} else {
/*
* PATCHSET UPDATE
*/
int added = totalCommits - currPatchset.commits;
boolean ff = JGitUtils.isMergedInto(getRepository(), currPatchset.tip, tip);
boolean squash = added < 0;
boolean rebase = !currPatchset.base.equals(mergeBase);
// determine type, number and rev of the patchset
if (ff) {
/*
* FAST-FORWARD
* patchset number preserved, rev incremented
*/
boolean merged = JGitUtils.isMergedInto(getRepository(), currPatchset.tip, ticket.mergeTo);
if (merged) {
// current patchset was already merged
// new patchset, mark as rebase
newPatchset.type = PatchsetType.Rebase;
newPatchset.number = currPatchset.number + 1;
newPatchset.rev = 1;
// diffstat from parent
DiffStat diffStat = DiffUtils.getDiffStat(getRepository(), mergeBase, tip);
newPatchset.insertions = diffStat.getInsertions();
newPatchset.deletions = diffStat.getDeletions();
} else {
// FF update to patchset
newPatchset.type = PatchsetType.FastForward;
newPatchset.number = currPatchset.number;
newPatchset.rev = currPatchset.rev + 1;
newPatchset.parent = currPatchset.tip;
// diffstat from parent
DiffStat diffStat = DiffUtils.getDiffStat(getRepository(), currPatchset.tip, tip);
newPatchset.insertions = diffStat.getInsertions();
newPatchset.deletions = diffStat.getDeletions();
}
} else {
/*
* NON-FAST-FORWARD
* new patchset, rev 1
*/
if (rebase && squash) {
newPatchset.type = PatchsetType.Rebase_Squash;
newPatchset.number = currPatchset.number + 1;
newPatchset.rev = 1;
} else if (squash) {
newPatchset.type = PatchsetType.Squash;
newPatchset.number = currPatchset.number + 1;
newPatchset.rev = 1;
} else if (rebase) {
newPatchset.type = PatchsetType.Rebase;
newPatchset.number = currPatchset.number + 1;
newPatchset.rev = 1;
} else {
newPatchset.type = PatchsetType.Amend;
newPatchset.number = currPatchset.number + 1;
newPatchset.rev = 1;
}
// diffstat from merge base
DiffStat diffStat = DiffUtils.getDiffStat(getRepository(), mergeBase, tip);
newPatchset.insertions = diffStat.getInsertions();
newPatchset.deletions = diffStat.getDeletions();
}
if (added > 0) {
// ignore squash (negative add)
newPatchset.added = added;
}
}
return newPatchset;
}
private RefUpdate updateRef(String ref, ObjectId newId, PatchsetType type) {
ObjectId ticketRefId = ObjectId.zeroId();
try {
ticketRefId = getRepository().resolve(ref);
} catch (Exception e) {
// ignore
}
try {
RefUpdate ru = getRepository().updateRef(ref, false);
ru.setRefLogIdent(getRefLogIdent());
switch (type) {
case Amend:
case Rebase:
case Rebase_Squash:
case Squash:
ru.setForceUpdate(true);
break;
default:
break;
}
ru.setExpectedOldObjectId(ticketRefId);
ru.setNewObjectId(newId);
RefUpdate.Result result = ru.update(getRevWalk());
if (result == RefUpdate.Result.LOCK_FAILURE) {
sendError("Failed to obtain lock when updating {0}:{1}", repository.name, ref);
sendError("Perhaps an administrator should remove {0}/{1}.lock?", getRepository().getDirectory(), ref);
return null;
}
return ru;
} catch (IOException e) {
LOGGER.error("failed to update ref " + ref, e);
sendError("There was an error updating ref {0}:{1}", repository.name, ref);
}
return null;
}
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));
}
/**
* Merge the specified patchset to the integration branch.
*
* @param ticket
* @param patchset
* @return true, if successful
*/
public MergeStatus merge(TicketModel ticket) {
PersonIdent committer = new PersonIdent(user.getDisplayName(), StringUtils.isEmpty(user.emailAddress) ? (user.username + "@gitblit") : user.emailAddress);
Patchset patchset = ticket.getCurrentPatchset();
String message = MessageFormat.format("Merged #{0,number,0} \"{1}\"", ticket.number, ticket.title);
Ref oldRef = null;
try {
oldRef = getRepository().getRef(ticket.mergeTo);
} catch (IOException e) {
LOGGER.error("failed to get ref for " + ticket.mergeTo, e);
}
MergeResult mergeResult = JGitUtils.merge(
getRepository(),
patchset.tip,
ticket.mergeTo,
committer,
message);
if (StringUtils.isEmpty(mergeResult.sha)) {
LOGGER.error("FAILED to merge {} to {} ({})", new Object [] { patchset, ticket.mergeTo, mergeResult.status.name() });
return mergeResult.status;
}
Change change = new Change(user.username);
change.setField(Field.status, Status.Merged);
change.setField(Field.mergeSha, mergeResult.sha);
change.setField(Field.mergeTo, ticket.mergeTo);
if (StringUtils.isEmpty(ticket.responsible)) {
// unassigned tickets are assigned to the closer
change.setField(Field.responsible, user.username);
}
long ticketId = ticket.number;
ticket = ticketService.updateTicket(repository, ticket.number, change);
if (ticket != null) {
ticketNotifier.queueMailing(ticket);
if (oldRef != null) {
ReceiveCommand cmd = new ReceiveCommand(oldRef.getObjectId(),
ObjectId.fromString(mergeResult.sha), oldRef.getName());
cmd.setResult(Result.OK);
List] commands = Arrays.asList(cmd);
logRefChange(commands);
updateIncrementalPushTags(commands);
updateGitblitRefLog(commands);
}
// call patchset hooks
for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
try {
hook.onMergePatchset(ticket);
} catch (Exception e) {
LOGGER.error("Failed to execute extension", e);
}
}
return mergeResult.status;
} else {
LOGGER.error("FAILED to resolve ticket {} by merge from web ui", ticketId);
}
return mergeResult.status;
}
public void sendAll() {
ticketNotifier.sendAll();
}
}
ort/48684/stable30'>backport/48684/stable30
backport/48689/stable29
backport/48689/stable30
backport/48696/stable28
backport/48696/stable29
backport/48696/stable30
backport/48723/stable30
backport/48728/stable30
backport/48736/stable27
backport/48736/stable28
backport/48736/stable29
backport/48736/stable30
backport/48737/stable30
backport/48738/stable31
backport/48743/stable29
backport/48743/stable30
backport/48749/stable27
backport/48760/stable30
backport/48766/stable28
backport/48766/stable29
backport/48766/stable30
backport/48769/stable29
backport/48769/stable30
backport/48787/stable30
backport/48788/stable27
backport/48788/stable28
backport/48788/stable29
backport/48788/stable30
backport/48793/stable30
backport/48795/stable31
backport/48799/stable30
backport/48809/stable30
backport/48824/stable29
backport/48833/stable30
backport/48839/stable28
backport/48839/stable29
backport/48839/stable30
backport/48850/stable30
backport/48852/stable30
backport/48853/stable30
backport/48854/stable30
backport/48863/stable30
backport/48871/stable29
backport/48871/stable30
backport/48882/stable30
backport/48887/stable29
backport/48887/stable30
backport/48889/stable28
backport/48898/stable28
backport/48898/stable29
backport/48898/stable30
backport/48912/stable30
backport/48915/stable28
backport/48915/stable29
backport/48915/stable30
backport/48917/stable25
backport/48917/stable26
backport/48917/stable27
backport/48917/stable28
backport/48917/stable29
backport/48917/stable30
backport/48918/stable28
backport/48918/stable29
backport/48918/stable30
backport/48921/stable25
backport/48921/stable26
backport/48921/stable27
backport/48921/stable28
backport/48921/stable29
backport/48921/stable30
backport/48933/stable28
backport/48933/stable29
backport/48933/stable30
backport/48934/stable28
backport/48947/stable28
backport/48947/stable29
backport/48947/stable30
backport/48991/stable29
backport/48991/stable30
backport/48992/stable27
backport/48992/stable28
backport/48992/stable29
backport/48992/stable30
backport/49004/stable28
backport/49004/stable29
backport/49004/stable30
backport/49009/49009-stable29
backport/49009/stable25
backport/49009/stable26
backport/49009/stable27
backport/49009/stable28
backport/49009/stable30
backport/49017/stable28
backport/49017/stable29
backport/49017/stable30
backport/49023/stable28
backport/49023/stable29
backport/49023/stable30
backport/49039/stable30
backport/49053/stable28
backport/49053/stable29
backport/49053/stable30
backport/49057/master
backport/49065/stable28
backport/49065/stable29
backport/49065/stable30
backport/49075/stable30
backport/49076/stable28
backport/49076/stable29
backport/49112/stable28
backport/49112/stable29
backport/49112/stable30
backport/49115/stable28
backport/49115/stable30
backport/49130/stable29
backport/49130/stable30
backport/49134/stable30
backport/49139/stable28
backport/49139/stable29
backport/49139/stable30
backport/49141/stable30
backport/49143/stable28
backport/49143/stable29
backport/49143/stable30
backport/49146/stable28
backport/49146/stable29
backport/49146/stable30
backport/49147/stable30
backport/49149/stable29
backport/49150/stable28
backport/49150/stable29
backport/49150/stable30
backport/49153/stable28
backport/49153/stable29
backport/49176/stable30
backport/49196/stable28
backport/49196/stable29
backport/49196/stable30
backport/49199/stable28
backport/49199/stable29
backport/49199/stable30
backport/49203/stable29
backport/49203/stable30
backport/49208/stable29
backport/49208/stable30
backport/49209/stable30
backport/49218/stable28
backport/49218/stable29
backport/49218/stable30
backport/49219/stable30
backport/49225/stable28
backport/49225/stable29
backport/49225/stable30
backport/49226/stable30
backport/49232/stable28
backport/49232/stable29
backport/49232/stable30
backport/49237/stable30
backport/49259/stable30
backport/49260/stable30
backport/49261/stable30
backport/49262/stable28
backport/49262/stable29
backport/49271/stable29
backport/49271/stable30
backport/49281/stable30
backport/49288/stable29
backport/49288/stable30
backport/49293/stable30
backport/49308/stable29
backport/49308/stable30
backport/49311/stable28
backport/49311/stable29
backport/49311/stable30
backport/49315/stable28
backport/49315/stable29
backport/49315/stable30
backport/49332/stable28
backport/49332/stable29
backport/49332/stable30
backport/49346/stable30
backport/49351/stable29
backport/49351/stable30
backport/49352/stable30
backport/49357/stable30
backport/49361/stable28
backport/49361/stable29
backport/49361/stable30
backport/49372/stable28
backport/49372/stable29
backport/49372/stable30
backport/49373/stable29
backport/49380/stable30
backport/49384/master
backport/49398/stable29
backport/49398/stable30
backport/49432/master
backport/49432/stable30
backport/49434/stable30
backport/49440/stable29
backport/49440/stable30
backport/49440/stable31
backport/49442/stable28
backport/49442/stable29
backport/49442/stable30
backport/49451/stable29
backport/49451/stable30
backport/49454/stable28
backport/49454/stable29
backport/49454/stable30
backport/49459/stable30
backport/49464/stable28
backport/49464/stable29
backport/49464/stable30
backport/49476/stable28
backport/49476/stable29
backport/49476/stable30
backport/49477/stable30
backport/49489/stable30
backport/49493/stable28
backport/49493/stable29
backport/49494/stable29
backport/49494/stable29-squashed
backport/49494/stable30
backport/49503/stable28
backport/49503/stable29
backport/49503/stable30
backport/49528/stable28
backport/49528/stable29
backport/49528/stable30
backport/49551/stable29
backport/49551/stable30
backport/49552/stable28
backport/49552/stable29
backport/49552/stable30
backport/49552/stable31
backport/49557/stable30
backport/49569/stable29
backport/49569/stable30
backport/49581/stable28
backport/49581/stable30
backport/49587/stable30
backport/49588/stable29
backport/49588/stable30
backport/49602/stable28
backport/49602/stable29
backport/49602/stable30
backport/49629/stable29
backport/49631/stable29
backport/49639/stable28
backport/49639/stable29
backport/49639/stable30
backport/49639/stable31
backport/49645/stable31
backport/49677/stable30
backport/49681/stable29
backport/49681/stable30
backport/49685/stable28
backport/49685/stable29
backport/49685/stable30
backport/49693/stable29
backport/49693/stable30
backport/49694/stable30
backport/49695/stable29
backport/49695/stable30
backport/49746/stable30
backport/49747/stable27
backport/49747/stable28
backport/49747/stable29
backport/49747/stable30
backport/49761/stable29
backport/49761/stable30
backport/49799/stable28
backport/49799/stable29
backport/49799/stable30
backport/49801/stable30
backport/49803/stable29
backport/49803/stable30
backport/49815/stable28
backport/49815/stable29
backport/49820/stable30
backport/49822/stable28
backport/49822/stable29
backport/49832/stable30
backport/49839/stable29
backport/49839/stable30
backport/49843/stable29
backport/49843/stable30
backport/49847/stable30
backport/49852/stable30
backport/49880/stable28
backport/49880/stable30
backport/49882/stable28
backport/49882/stable29
backport/49885/stable30
backport/49887/stable29
backport/49887/stable30
backport/49895/stable29
backport/49895/stable30
backport/49898/stable30
backport/49900/stable29
backport/49903/stable29
backport/49903/stable30
backport/49917/stable30
backport/49927/stable28
backport/49962/stable29
backport/49962/stable30
backport/49966/stable29
backport/49966/stable30
backport/49973/master
backport/49974/stable29
backport/49974/stable30
backport/49988/stable29
backport/49988/stable30
backport/50017/stable29
backport/50017/stable30
backport/50025/stable29
backport/50025/stable30
backport/50026/stable29
backport/50026/stable30
backport/50034/stable29
backport/50034/stable30
backport/50035/stable28
backport/50035/stable29
backport/50035/stable30
backport/50046/stable29
backport/50046/stable30
backport/50053/stable29
backport/50053/stable30
backport/50053/stable31
backport/50070/stable29
backport/50070/stable30
backport/50076/stable29
backport/50076/stable30
backport/50077/stable29
backport/50077/stable30
backport/50081/stable31
backport/50083/stable30
backport/50111/stable29
backport/50111/stable30
backport/50113/stable29
backport/50113/stable30
backport/50121/master
backport/50121/stable30
backport/50121/stable31
backport/50123/master
backport/50123/stable29
backport/50123/stable30
backport/50128/stable29
backport/50128/stable30
backport/50129/stable30
backport/50129/stable31
backport/50152/stable29
backport/50152/stable30
backport/50154/stable29
backport/50157/stable30
backport/50157/stable31
backport/50161/stable29
backport/50161/stable30
backport/50177/stable29
backport/50177/stable30
backport/50179/stable30
backport/50187/stable30
backport/50192/stable28
backport/50192/stable29
backport/50192/stable30
backport/50193/stable29
backport/50193/stable30
backport/50193/stable31
backport/50220/stable30
backport/50234/stable30
backport/50234/stable31
backport/50237/stable29
backport/50241/stable30
backport/50244/stable31
backport/50260/stable30
backport/50260/stable31
backport/50270/stable26
backport/50270/stable27
backport/50270/stable28
backport/50270/stable28-follow-up
backport/50270/stable29
backport/50270/stable30
backport/50270/stable31
backport/50273/stable29
backport/50273/stable30
backport/50273/stable31
backport/50281/stable31
backport/50282/stable31
backport/50284/stable30
backport/50284/stable31
backport/50292/stable29
backport/50292/stable30
backport/50293/stable29
backport/50293/stable30
backport/50293/stable31
backport/50298/stable29
backport/50298/stable30
backport/50298/stable31
backport/50299/stable28
backport/50299/stable29
backport/50299/stable30
backport/50299/stable31
backport/50319/stable29
backport/50319/stable30
backport/50324/stable30
backport/50324/stable31
backport/50330/stable30
backport/50330/stable31
backport/50331/stable30
backport/50331/stable31
backport/50333/stable29
backport/50353/stable29
backport/50353/stable30
backport/50353/stable31
backport/50362/stable31
backport/50364/stable31
backport/50366/stable31
backport/50368/stable31
backport/50369/stable29
backport/50369/stable30
backport/50369/stable31
backport/50389/stable31
backport/50394/stable30
backport/50394/stable31
backport/50398/stable29
backport/50398/stable30
backport/50424/stable29
backport/50424/stable30
backport/50424/stable31
backport/50426/stable31
backport/50430/stable29
backport/50430/stable30
backport/50436/stable31
backport/50437/stable29
backport/50446/stable31
backport/50447/stable30
backport/50455/stable30
backport/50455/stable31
backport/50464/stable30
backport/50464/stable31
backport/50465/stable29
backport/50465/stable30
backport/50465/stable31
backport/50480/stable29
backport/50490/stable30
backport/50490/stable31
backport/50494/stable29
backport/50494/stable30
backport/50494/stable31
backport/50498/stable31
backport/50501/stable31
backport/50503/stable30
backport/50503/stable31
backport/50514/stable29
backport/50514/stable30
backport/50514/stable31
backport/50515/stable29
backport/50515/stable30
backport/50515/stable31
backport/50519/stable29
backport/50519/stable30
backport/50519/stable31
backport/50524/stable30
backport/50524/stable31
backport/50530/stable29
backport/50530/stable30
backport/50530/stable31
backport/50540/stable30
backport/50540/stable31
backport/50542/stable29
backport/50542/stable30
backport/50542/stable31
backport/50549/stable29
backport/50550/stable30
backport/50550/stable31
backport/50567/stable30
backport/50567/stable31
backport/50576/stable31
backport/50582/stable30
backport/50582/stable31
backport/50592/stable31
backport/50602/stable30
backport/50602/stable31
backport/50626/stable29
backport/50635/stable31
backport/50640/stable30
backport/50640/stable31
backport/50642/stable29
backport/50642/stable30
backport/50642/stable31
backport/50645/stable31
backport/50655/stable29
backport/50655/stable30
backport/50655/stable31
backport/50657/stable30
backport/50657/stable31
backport/50660/stable29
backport/50660/stable30
backport/50660/stable31
backport/50663/stable28
backport/50663/stable29
backport/50663/stable30
backport/50663/stable31
backport/50666/stable27
backport/50666/stable28
backport/50666/stable29
backport/50666/stable30
backport/50666/stable31
backport/50669/stable30
backport/50669/stable31
backport/50678/stable29
backport/50678/stable30
backport/50678/stable31
backport/50680/stable31
backport/50691/stable29
backport/50692/stable31
backport/50693/stable28
backport/50697/stable31
backport/50735/stable30
backport/50735/stable31
backport/50739/stable31
backport/50768/stable31
backport/50769/stable29
backport/50769/stable30
backport/50769/stable31
backport/50778/stable29
backport/50781/stable29
backport/50781/stable30
backport/50781/stable31
backport/50783/stable30
backport/50783/stable31
backport/50784/stable30
backport/50784/stable31
backport/50794/stable31
backport/50798/stable29
backport/50798/stable31
backport/50807/stable29
backport/50807/stable30
backport/50807/stable31
backport/50809/stable29
backport/50809/stable30
backport/50809/stable31
backport/50814/stable29
backport/50814/stable30
backport/50814/stable31
backport/50816/stable30
backport/50816/stable31
backport/50820/stable29
backport/50820/stable30
backport/50820/stable31
backport/50852/stable30
backport/50858/stable29
backport/50858/stable30
backport/50858/stable31
backport/50860/stable30
backport/50860/stable31
backport/50873/stable31
backport/50874/stable29
backport/50874/stable30
backport/50874/stable31
backport/50878/stable30
backport/50881/stable30
backport/50881/stable31
backport/50896/stable29
backport/50896/stable30
backport/50896/stable31
backport/50903/stable29
backport/50903/stable30
backport/50903/stable31
backport/50904/stable31
backport/50905/stable30
backport/50905/stable31
backport/50910/stable29
backport/50910/stable30
backport/50910/stable31
backport/50918/stable30
backport/50918/stable31
backport/50919/stable30
backport/50919/stable31
backport/50920/stable31
backport/50922/stable29
backport/50922/stable31
backport/50930/stable30
backport/50942/stable31
backport/50943/stable30
backport/50949/stable29
backport/50949/stable30
backport/50949/stable31
backport/50956/stable29
backport/50956/stable30
backport/50956/stable31
backport/50958/stable29
backport/50958/stable30
backport/50958/stable31
backport/50970/stable31
backport/50979/stable31
backport/50985/stable30
backport/50985/stable31
backport/50987/stable31
backport/50989/stable28
backport/50989/stable29
backport/50989/stable30
backport/50989/stable31
backport/50992/stable31
backport/51000/stable29
backport/51000/stable30
backport/51000/stable31
backport/51010-51839/stable29
backport/51010/stable29
backport/51010/stable30
backport/51010/stable31
backport/51019/stable26
backport/51019/stable27
backport/51019/stable28
backport/51019/stable29
backport/51019/stable30
backport/51019/stable31
backport/51020/stable29
backport/51020/stable30
backport/51020/stable31
backport/51031/stable31
backport/51049/stable29
backport/51049/stable30
backport/51049/stable31
backport/51050/stable28
backport/51050/stable29
backport/51050/stable30
backport/51050/stable31
backport/51051/stable25
backport/51051/stable26
backport/51051/stable27
backport/51051/stable28
backport/51051/stable29
backport/51051/stable30
backport/51051/stable31
backport/51069/stable31
backport/51071/stable30
backport/51071/stable31
backport/51073/stable29
backport/51073/stable30
backport/51073/stable31
backport/51077/stable31
backport/51079/stable31
backport/51081/stable30
backport/51081/stable31
backport/51082/stable31
backport/51108/stable29
backport/51108/stable30
backport/51108/stable31
backport/51126/stable31
backport/51130/stable28
backport/51130/stable29
backport/51130/stable30
backport/51130/stable31
backport/51131/stable30
backport/51131/stable31
backport/51132/stable30
backport/51142/stable30
backport/51142/stable31
backport/51144/stable29
backport/51144/stable30
backport/51144/stable31
backport/51146/stable29
backport/51146/stable30
backport/51146/stable31
backport/51148/stable30
backport/51148/stable31
backport/51151/stable31
backport/51152/stable31
backport/51173/master
backport/51194/stable26
backport/51194/stable27
backport/51194/stable28
backport/51194/stable29
backport/51194/stable30
backport/51194/stable31
backport/51211/stable31
backport/51216/stable29
backport/51216/stable30
backport/51216/stable31
backport/51218/stable31
backport/51229/stable30
backport/51229/stable31
backport/51239/stable31
backport/51243/stable30
backport/51250/stable29
backport/51250/stable30
backport/51250/stable31
backport/51256/stable28
backport/51256/stable29
backport/51256/stable30
backport/51258/stable30
backport/51258/stable31
backport/51259/stable28
backport/51259/stable29
backport/51259/stable30
backport/51259/stable31
backport/51260/master
backport/51280/stable26
backport/51280/stable27
backport/51280/stable28
backport/51280/stable29
backport/51281/stable29
backport/51285/stable29
backport/51287/stable31
backport/51302/stable30
backport/51302/stable31
backport/51309/stable31
backport/51310/stable31
backport/51320/stable29
backport/51320/stable30
backport/51320/stable31
backport/51333/stable29
backport/51333/stable30
backport/51333/stable31
backport/51336/stable30
backport/51336/stable31
backport/51361/stable26
backport/51361/stable27
backport/51361/stable28
backport/51361/stable29
backport/51361/stable30
backport/51361/stable31
backport/51364/stable29
backport/51364/stable30
backport/51364/stable31
backport/51365/stable31
backport/51378/stable31
backport/51379/stable30
backport/51379/stable31
backport/51380/stable29
backport/51380/stable30
backport/51380/stable31
backport/51384/stable29
backport/51384/stable30
backport/51384/stable31
backport/51389/stable29
backport/51389/stable30
backport/51389/stable31
backport/51394/stable31
backport/51404/stable29
backport/51404/stable30
backport/51405/stable29
backport/51405/stable30
backport/51407/stable22
backport/51407/stable23
backport/51407/stable24
backport/51407/stable25
backport/51407/stable26
backport/51407/stable27
backport/51407/stable28
backport/51418/stable30
backport/51418/stable31
backport/51431/stable30
backport/51431/stable31
backport/51433/stable29
backport/51433/stable30
backport/51433/stable31
backport/51434/stable29
backport/51434/stable30
backport/51434/stable31
backport/51438/stable29
backport/51438/stable30
backport/51438/stable31
backport/51439/stable30
backport/51439/stable31
backport/51440/master
backport/51441/stable30
backport/51441/stable31
backport/51442/stable31
backport/51449/stable30
backport/51449/stable31
backport/51458/stable31
backport/51469/stable30
backport/51469/stable31
backport/51471/stable30
backport/51471/stable31
backport/51477/stable29
backport/51477/stable30
backport/51477/stable31
backport/51490/stable31
backport/51491/stable30
backport/51491/stable31
backport/51501/stable31
backport/51512/stable31
backport/51521/stable31
backport/51524/stable31
backport/51544/stable26
backport/51544/stable27
backport/51544/stable28
backport/51544/stable29
backport/51544/stable30
backport/51544/stable31
backport/51554/stable25
backport/51594/stable30
backport/51598/stable29
backport/51598/stable30
backport/51598/stable31
backport/51600/stable29
backport/51600/stable30
backport/51600/stable31
backport/51602/stable28
backport/51602/stable29
backport/51602/stable30
backport/51602/stable31
backport/51603/stable30
backport/51603/stable31
backport/51608/stable31
backport/51609/stable30
backport/51609/stable31
backport/51611/stable30
backport/51611/stable31
backport/51622/stable31
backport/51644/stable29
backport/51644/stable30
backport/51644/stable31
backport/51668/stable29
backport/51668/stable30
backport/51668/stable31
backport/51669/stable30
backport/51669/stable31
backport/51675/stable30
backport/51675/stable31
backport/51684/stable31
backport/51689/stable30
backport/51689/stable31
backport/51697/stable29
backport/51697/stable30
backport/51697/stable31
backport/51705/stable29
backport/51705/stable30
backport/51705/stable31
backport/51707/stable29
backport/51707/stable30
backport/51707/stable31
backport/51715/stable31
backport/51724/stable30
backport/51724/stable31
backport/51737/stable29
backport/51737/stable30
backport/51737/stable31
backport/51744/stable29
backport/51744/stable30
backport/51744/stable31
backport/51745/stable29
backport/51745/stable30
backport/51745/stable31
backport/51750/stable29
backport/51750/stable30
backport/51750/stable31
backport/51760/stable28
backport/51760/stable29
backport/51760/stable30
backport/51760/stable31
backport/51807/stable29
backport/51818/stable30
backport/51818/stable31
backport/51837/stable29
backport/51837/stable30
backport/51837/stable31
backport/51845/stable31
backport/51852/stable31
backport/51861/stable29
backport/51861/stable30
backport/51861/stable31
backport/51863/stable29
backport/51863/stable30
backport/51863/stable31
backport/51866/stable29
backport/51866/stable30
backport/51866/stable31
backport/51870/stable29
backport/51870/stable30
backport/51870/stable31
backport/51876/stable31
backport/51905/stable26
backport/51905/stable27
backport/51905/stable28
backport/51905/stable29
backport/51905/stable30
backport/51905/stable31
backport/51920/stable29
backport/51920/stable30
backport/51920/stable31
backport/51927/stable31
backport/51937/stable30
backport/51937/stable31
backport/51942/stable31
backport/51944/stable29
backport/51944/stable30
backport/51944/stable31
backport/51946/stable31
backport/51982/stable29
backport/51982/stable30
backport/51982/stable31
backport/51994/stable28
backport/51994/stable29
backport/51994/stable30
backport/51994/stable31
backport/52008/stable30
backport/52008/stable31
backport/52013/stable28
backport/52013/stable29
backport/52013/stable30
backport/52013/stable31
backport/52015/stable29
backport/52015/stable30
backport/52019/stable29
backport/52019/stable30
backport/52019/stable31
backport/52035/stable31
backport/52045/stable31
backport/52046/stable31
backport/52048/stable30
backport/52048/stable31
backport/52050/stable31
backport/52066/stable30
backport/52066/stable31
backport/52072/stable30
backport/52072/stable31
backport/52073/stable30
backport/52073/stable31
backport/52075/stable29
backport/52075/stable30
backport/52075/stable31
backport/52079/stable31
backport/52085/stable31
backport/52094/stable31
backport/52099/stable31
backport/52116/stable31
backport/52121/stable30
backport/52121/stable31
backport/52133/stable31
backport/52135/stable29
backport/52135/stable30
backport/52168/stable31
backport/52180/stable31
backport/52187/stable30
backport/52215/stable30
backport/52215/stable31
backport/52221/stable31
backport/52223/stable29
backport/52223/stable30
backport/52223/stable31
backport/52224/stable31
backport/52228/stable30
backport/52228/stable31
backport/52240/stable31
backport/52242/stable29
backport/52242/stable30
backport/52242/stable31
backport/52249/stable31
backport/52250/stable30
backport/52250/stable31
backport/52252/stable31
backport/52257/stable31
backport/52269/stable31
backport/52296/stable30
backport/52296/stable31
backport/52299/stable31
backport/52360/stable29
backport/52360/stable30
backport/52360/stable31
backport/52361/stable30
backport/52361/stable31
backport/52364/stable29
backport/52364/stable30
backport/52364/stable31
backport/52366/stable31
backport/52373/stable30
backport/52373/stable31
backport/52374/stable30
backport/52374/stable31
backport/52375/stable30
backport/52375/stable31
backport/52402/stable30
backport/52402/stable31
backport/52404/stable31
backport/52417/stable30
backport/52417/stable31
backport/52423/stable31
backport/52429/stable29
backport/52429/stable30
backport/52429/stable31
backport/52434/stable30
backport/52434/stable31
backport/52438/stable31
backport/52439/stable31
backport/52441/stable31
backport/52443/stable31
backport/52479/stable31
backport/52503/stable30
backport/52503/stable31
backport/52514/stable31
backport/52516/stable28
backport/52516/stable29
backport/52525/stable30
backport/52525/stable31
backport/52526/stable30
backport/52526/stable31
backport/52532/stable31
backport/52533/stable31
backport/52534/stable30
backport/52534/stable31
backport/52535/stable30
backport/52535/stable31
backport/52543/stable30
backport/52543/stable31
backport/52551/stable30
backport/52551/stable31
backport/52565/stable31
backport/52572/stable30
backport/52572/stable31
backport/52575/stable30
backport/52575/stable31
backport/52583/stable29
backport/52583/stable30
backport/52583/stable31
backport/52587/stable30
backport/52589/stable30
backport/52589/stable31
backport/52628/stable26
backport/52628/stable27
backport/52628/stable28
backport/52628/stable29
backport/52628/stable30
backport/52628/stable31
backport/52630/stable31
backport/52634/stable31
backport/52642/stable30
backport/52642/stable31
backport/52665/stable31
backport/52681/stable30
backport/52681/stable31
backport/52686/stable30
backport/52686/stable31
backport/52693/stable30
backport/52693/stable31
backport/52694/stable30
backport/52694/stable31
backport/52699/stable30
backport/52699/stable31
backport/52703/stable31
backport/52706/stable30
backport/52706/stable31
backport/52707/stable29
backport/52707/stable30
backport/52707/stable31
backport/52708/stable29
backport/52708/stable30
backport/52708/stable31
backport/52752/stable30
backport/52752/stable31
backport/52755/stable29
backport/52755/stable30
backport/52771/stable31
backport/52772/stable29
backport/52772/stable30
backport/52772/stable31
backport/52775/stable29
backport/52775/stable30
backport/52775/stable31
backport/52776/stable30
backport/52776/stable31
backport/52778/stable30
backport/52778/stable31
backport/52782/stable30
backport/52782/stable31
backport/52792/stable31
backport/52798/stable30
backport/52798/stable31
backport/52808/stable30
backport/52809/stable30
backport/52809/stable31
backport/52810/stable31
backport/52813/stable30
backport/52813/stable31
backport/52825/stable29
backport/52825/stable30
backport/52825/stable31
backport/52833/stable30
backport/52833/stable31
backport/52850/stable29
backport/52851/stable30
backport/52851/stable31
backport/52859/stable30
backport/52859/stable31
backport/52871/stable31
backport/52873/stable30
backport/52873/stable31
backport/52879/stable30
backport/52879/stable31
backport/52891/stable30
backport/52891/stable31
backport/52897/stable30
backport/52897/stable31
backport/52914/stable30
backport/52914/stable31
backport/52932/stable30
backport/52932/stable31
backport/52951/stable29
backport/52951/stable30
backport/52951/stable31
backport/52963/stable30
backport/52963/stable31
backport/52972/stable30
backport/52972/stable31
backport/52976/stable29
backport/52976/stable30
backport/52976/stable31
backport/52981/stable29
backport/52981/stable30
backport/52981/stable31
backport/52996/stable30
backport/52996/stable31
backport/53000/stable30
backport/53000/stable31
backport/53001/stable30
backport/53001/stable31
backport/53005/stable30
backport/53005/stable31
backport/53029/stable30
backport/53029/stable31
backport/53032/stable31
backport/53054/stable30
backport/53054/stable31
backport/53055/master
backport/53075/stable30
backport/53075/stable31
backport/53109/stable30
backport/53109/stable31
backport/53112/stable30
backport/53112/stable31
backport/53120/stable29
backport/53120/stable30
backport/53120/stable31
backport/53124/stable30
backport/53124/stable31
backport/53130/stable29
backport/53130/stable30
backport/53130/stable31
backport/53131/stable30
backport/53131/stable31
backport/53140/stable30
backport/53140/stable31
backport/53145/stable30
backport/53145/stable31
backport/53147/stable30
backport/53147/stable31
backport/53171/stable30
backport/53171/stable31
backport/53178/stable30
backport/53178/stable31
backport/53198/stable29
backport/53198/stable30
backport/53198/stable31
backport/53205/stable30
backport/53205/stable31
backport/53210/stable30
backport/53210/stable31
backport/53244/stable31
backport/53250/stable29
backport/53250/stable30
backport/53250/stable31
backport/53264/stable30
backport/53264/stable31
backport/53273/stable31
backport/53274/stable30
backport/53274/stable31
backport/53275/stable31
backport/53276/stable30
backport/53276/stable31
backport/53277/stable31
backport/53278/stable30
backport/53285/stable30
backport/53285/stable31
backport/53291/stable30
backport/53291/stable31
backport/53292/stable29
backport/53292/stable30
backport/53292/stable31
backport/53295/stable27
backport/53295/stable28
backport/53304/stable30
backport/53304/stable31
backport/53314/stable30
backport/53314/stable31
backport/53321/stable29
backport/53321/stable30
backport/53321/stable31
backport/53322/stable31
backport/53323/stable30
backport/53323/stable31
backport/53326/stable30
backport/53326/stable31
backport/53339/stable31
backport/53356/stable29
backport/53363/stable30
backport/53363/stable31
backport/53369/stable30
backport/53369/stable31
backport/53378/stable30
backport/53378/stable31
backport/53398/stable30
backport/53398/stable31
backport/53418/stable30
backport/53418/stable31
backport/53419/stable30
backport/53419/stable31
backport/53420/stable30
backport/53420/stable31
backport/53426/stable30
backport/53426/stable31
backport/53427/stable31
backport/53429/stable30
backport/53429/stable31
backport/53436/stable30
backport/53436/stable31
backport/53466/stable30
backport/53466/stable31
backport/53477/stable31
backport/53498/stable30
backport/53498/stable31
backport/53499/stable30
backport/53499/stable31
backport/53501/stable30
backport/53501/stable31
backport/53512/stable30
backport/53512/stable31
backport/53514/stable31
backport/53534/stable30
backport/53534/stable31
backport/53548/stable31
backport/53564/stable30
backport/53564/stable31
backport/53567/stable30
backport/53567/stable31
backport/53569/stable31
backport/53574/stable30
backport/53574/stable31
backport/53590/stable31
backport/53607/stable30
backport/53607/stable31
backport/53616/stable30
backport/53616/stable31
backport/53635/stable30
backport/53635/stable31
backport/53639/stable30
backport/53639/stable31
backport/53647/stable31
backport/53648/stable30
backport/53648/stable31
backport/53661/stable31
backport/53665/stable30
backport/53665/stable31
backport/53669/stable31
backport/53677/stable30
backport/53677/stable31
backport/53693/stable30
backport/53693/stable31
backport/53695/stable30
backport/53695/stable31
backport/53698/stable31
backport/53730/stable30
backport/53735/stable31
backport/53738/stable30
backport/53738/stable31
backport/53741/stable30
backport/53741/stable31
backport/53764/stable31
backport/53767/stable30
backport/53767/stable31
backport/53773/stable29
backport/53788/stable31
backport/53814/stable30
backport/53814/stable31
backport/53840/stable30
backport/53840/stable31
backport/53855/stable30
backport/53855/stable31
backport/53857/stable31
backport/53872/stable30
backport/53872/stable31
backport/53875/stable31
backport/53887/stable30
backport/53887/stable31
backport/53897/stable31
backport/53909/stable30
backport/53909/stable31
backport/53922/stable30
backport/53922/stable31
backport/53964/stable30
backport/53964/stable31
backport/53966/stable30
backport/53967/stable30
backport/53967/stable31
backport/53968/stable30
backport/53968/stable31
backport/53972/stable31
backport/53979/stable30
backport/53979/stable31
backport/53983/stable30
backport/53983/stable31
backport/53986/stable30
backport/53986/stable31
backport/53992/stable30
backport/53992/stable31
backport/54003/stable31
backport/54005/stable30
backport/54005/stable31
backport/54014/stable31
backport/54016/stable31
backport/54019/stable29
backport/54019/stable30
backport/54019/stable31
backport/54027/stable29
backport/54027/stable30
backport/54027/stable31
backport/54037/stable30
backport/54037/stable31
backport/54051/stable30
backport/54051/stable31
backport/54055/stable30
backport/54055/stable31
backport/54068/stable30
backport/54068/stable31
backport/54119/stable31
backport/cachebuster-stable30
backport/dav-get
backport/fix-files-title
backport/object-store-orphan/27
backportArrayKeySetupCheks
block-dav-move-parent
branchoff/welcome-stable31
bug/19494/insert-ignore-conflict-for-filecache-extended
bug/30282/wrap-curl-in-stream-handler
bug/48518/ignore-invalid-dates
bug/48678/restore-dav-error-response
bug/48678/restore-dav-error-response-2
bug/49395/handle-multiple-tags
bug/49834/calendar-unsharing
bug/52977/opcache-reset-after-app-extract
bug/53243/wrong-app-id-for-systemtags-settings
bug/53811/charset-imip
bug/53856/hide-password-on-submit
bug/noid/clear-dav-photo-cache
bug/noid/codeowners-caldav-carddav
bug/noid/context-for-imip-warnings
bug/noid/drop-group-exists-cache-fetch-list-of-groups
bug/noid/expires-date-format
bug/noid/federated-addressbook-sync-without-localaddressallowed
bug/noid/federation-background-job-same-url-different-token
bug/noid/fix-wrong-table-name-reminders
bug/noid/group-imip-logs-in-sentry
bug/noid/handle-n-attendees-in-imip-cancel
bug/noid/hide-guests-groups
bug/noid/log-absolute-path-for-locked-exception-through-view
bug/noid/log-requests-exceeding-rate-limit
bug/noid/more-routing-weirdness
bug/noid/principal-guest_app-not-found
bug/noid/profile-clear-not-working
bug/noid/self-signed-trusted-servers-address-book-sync
bug/noid/skip-exceptions-in-transfer-ownership
bug/noid/skip-quote-cache-for-remote-shares
bug/noid/take-groups-and-circles-into-account-for-unshares
bug/noid/weird-ldap-caching
bugfix/45481/controller-parameter-overwrite
bugfix/47658/dont-fail-precondition-if-unset
bugfix/49973/allow-federated-filesharing-without-federation-app
bugfix/50443/fix-log-level-handling
bugfix/50619/correctly-init-server
bugfix/50619/no-session-work-in-constructor
bugfix/51082/restore-BC
bugfix/51248/no-session-work-in-constructor
bugfix/52420/closure-as-default-app
bugfix/53157/fix-hasNotifier-check
bugfix/53457/red-ci
bugfix/53985/trigger-update-for-autodisabled-local-apps
bugfix/cleanup-s3-multipart
bugfix/error-on-reshare-after-transfer-ownership
bugfix/exception-appscreenshot-notstring
bugfix/fix-not-found-exception-for-anonymous-users
bugfix/fix-service-worker-scope
bugfix/ios-3365/allow-2fa-for-ephemeral-sessions
bugfix/l10n-leading-spaces
bugfix/noid/add-missing-blurhash
bugfix/noid/allow-ratelimit-bypass
bugfix/noid/allow-to-fail-fake-AI-providers
bugfix/noid/allow-to-force-db-throttler
bugfix/noid/allow-to-get-permissions-of-a-principal
bugfix/noid/array-keys
bugfix/noid/background-job-testing
bugfix/noid/bump-php-dependency-update-versions
bugfix/noid/censor-more-app-configs
bugfix/noid/censor-more-values
bugfix/noid/compatibility-with-30
bugfix/noid/consistent-handling-of-SensitiveParameter
bugfix/noid/copy-better-typing-from-notifications-app
bugfix/noid/create-a-gap-before-files
bugfix/noid/document-hide-download
bugfix/noid/document-icon-requirements
bugfix/noid/dont-break-when-checking-if-too-long-user-exists
bugfix/noid/ensure-translation-of-shipped-apps
bugfix/noid/fix-activity-parameter-types
bugfix/noid/fix-autocomplete-of-app-configs
bugfix/noid/fix-cached-return-of-display-name
bugfix/noid/fix-download-activity-parameters
bugfix/noid/fix-icon-builder-warning
bugfix/noid/fix-infinite-loop-on-parallelaware-block
bugfix/noid/fix-oauth2-owncloud-migration
bugfix/noid/fix-otf-loading
bugfix/noid/fix-psr4-class
bugfix/noid/fix-room-or-resource-condition
bugfix/noid/fix-rtl-language-list
bugfix/noid/fix-tainted-file-appinfo
bugfix/noid/fix-triple-dot-translation
bugfix/noid/fix-type-error
bugfix/noid/ignore-sensitivity-when-explicitly-scheduled
bugfix/noid/improve-english-sources
bugfix/noid/improve-installation-speed-of-oracle
bugfix/noid/increase-exclude-list
bugfix/noid/keep-job-class-limitation
bugfix/noid/last-insert-id-when-reconnecting
bugfix/noid/make-comments-test-better-readable
bugfix/noid/mark-more-configs-as-sensitive
bugfix/noid/more-reliable-tests
bugfix/noid/only-check-to-cleanup-chunks-once
bugfix/noid/oracle-federation
bugfix/noid/prevent-infitnite-loop
bugfix/noid/remove-3rdparty-use
bugfix/noid/remove-more-withConsecutive
bugfix/noid/remove-sleep-from-throttler
bugfix/noid/run-all-unit-tests
bugfix/noid/skip-future-shipped-apps-from-updatenotification-check
bugfix/noid/update-opendyslexic
bugfix/noid/update-phpunit
bugfix/noid/use-query-parameters
bugfix/noid/user-ldap-cert-issue-8.3.21
bugfix/noid/user_status-unique-constraint
bugfix/noid/validate-parameter-keys
bugfix/trim-tags
build/autoloader/remove-noisy-changes
build/integration/disable-password_policy-app
build/psalm/unstable-namespace
build/translation-checker-print-rtl-limited-characters
build/update-psalm-baseline
cache-delete-notfound-size
cache-rename-source-error
case-insensitive-login
castUsersCountToInt
catchNullHash
certificate-manager-fallback
check-phpoutdated
checkColExists
checkResultArray
checkStorageIdSetCache
checkValidEncoding
chore-check-for-composer-bin
chore/30-symfony
chore/30-update-vue
chore/31-doctrine
chore/31-phpseclib
chore/31-symfony
chore/31-update-vue
chore/3rdparty-stecman-console
chore/48408/rename-twitter-to-x
chore/48409/replace-diaspora-and-twitter
chore/add-deprecation-date
chore/app-owners
chore/backport-50985
chore/behat-indention
chore/cleanup-warnings
chore/codeowners
chore/consistent-naming
chore/constants/sort
chore/cypress-typos
chore/dav/first-class-callable
chore/dav/refactor-inline-listeners
chore/debug-output
chore/dependabot
chore/depreate-oc-helper-ro
chore/deprecate-ochelper-copyr
chore/deps-nextcloud-vue-8-28
chore/deps/nextcloud-calendar-availability-vue-2.2.5
chore/deps/nextcloud-calendar-availability-vue-2.2.6
chore/deps/nextcloud-coding-standard
chore/deps/nextcloud-vue-8.22.0
chore/deps/openapi-extractor
chore/deps/rector-2.0
chore/drop-deprecated-account-scopes
chore/drop-jsdoc
chore/drop-query-string-dependency
chore/drop-skjnldsv/sanitize-svg
chore/encryption-php10
chore/files-consolitate-route-logic
chore/files-public-api
chore/files-title
chore/first-login-hours-minutes
chore/force-style-lint
chore/gender-neutral-language
chore/github/groupware-code-owners-update
chore/ignore-3rdparty
chore/ignore-code-style
chore/integration/hide-webserver-logs
chore/laravel-php84
chore/lazy-mount-providers
chore/legacy-updatenotification
chore/mail-bisect-6e1d9a26209ec5524fbc2fb9c7cbb53315e64d72
chore/mail-bisect-ee48cafd200233203a1444dba797ef3eb89a35ca
chore/mailer-tests
chore/master-searchdav
chore/migrate-encryption-away-from-hooks
chore/migrate-vite
chore/move-impl-util
chore/move-smb-package
chore/move-stream-copy-implementation
chore/ncselect-label-warning
chore/nextcloud-dialogs
chore/nextcloud-dialogs-master
chore/nextcloud-dialogs-stable29
chore/nextcloud-vue-8.13.0
chore/nix-flake
chore/no-moment
chore/node-moved-old-node
chore/noid/clarify-comments-api
chore/noid/coverage
chore/noid/disable-codecove-locally
chore/noid/git-blame-ignore-revs
chore/noid/use-same-app-id
chore/oc-helper-can-exec
chore/oc-helper-filesize
chore/oc-helper-rmdirr
chore/openstack-3-12
chore/phpseclib-30
chore/prepare-oc_repair-unit10
chore/psalm-test
chore/public/user-mount-events-union-type
chore/refactor-core
chore/refactor-update-notification+
chore/remove-dead-code-files
chore/remove-deprecated-aliases
chore/remove-deprecated-oc-helper
chore/remove-files-templates
chore/remove-get-storage
chore/remove-hierarchical-shares
chore/remove-ijob-execute
chore/remove-ilogger
chore/remove-legacy-files-scripts
chore/remove-legacy-settings-fors
chore/remove-live-timestamps
chore/remove-old-test
chore/remove-travis
chore/request-reviews
chore/s30-deps-nextcloud-vue-8-28
chore/s31-deps-nextcloud-vue-8-28
chore/server-annotations
chore/share-constants
chore/stable30-doctrine
chore/stable30-laravel
chore/stable30-vue_8_23_1
chore/stable31-laravel
chore/support-longer-names
chore/switch-deps
chore/symfony-http
chore/symfony-process
chore/tests-hot-key
chore/too-many-arguments
chore/typo
chore/update-3rdparty
chore/update-guzzle7
chore/update-gw-codeowners-2
chore/update-nc-libs-stable29
chore/update-nc-libs-stable30
chore/update-nextcloud-vue-23_1
chore/update-openstack
chore/update-sass-loader
chore/update-stub
chore/update-symfony
chore/update_mysql_setup_check_i18n
chore/upload-1-9-1
chore/use-codeowners-instead
chore/use-nextcloud-cypress-docker-node
chore/use-public-api-helper
chore/user-mount-events-since
ci-fix-30
ci-mariadb-118
ci/49145/php-8.4-external-storages
ci/noid/3rdparty
ci/noid/3rdparty-29
ci/noid/3rdparty-30
ci/noid/3rdparty-31
ci/noid/crl31
ci/noid/debug-broken-ci
ci/noid/enable-required-php-extensions
ci/noid/fail-fast-false
ci/noid/ghActionSync
ci/noid/improve-running-psalm-locally
ci/noid/make-run-names-distinct
ci/noid/more-action-hardening
ci/noid/more-action-hardening-31
ci/noid/php-8.4
ci/noid/prepare-phpunit-10
ci/noid/prepare-phpunit10-part2
ci/noid/require-up-to-date-psalm-paseline
ci/noid/run-some-autochecks-also-on-non-php-files
ci/noid/skip-other-vendor-bins-when-only-running-psalm
ci/noid/syncActions
ci/noid/syncActions30
ci/noid/try-to-fix-smb-kerberos
ci/noid/update-integration-test-stuff
ci/noid/update-phpunit10
ci/noid/workflows-stable31
ci/oracle
ci/oracle-2
ci/phpunit-10
ci/phpunit-10--process-isolation
ci/psalm/imagick-extension
ci/request-reviews-perms
ci/revert/47342
ci/sso
ciBumpPhpUnit10
clean/version-ocp
cleanup/event/trashbin
cleanup/karma
clear-pending-two-factor-tokens-also-from-configuration
clearKeysInBatches
confWordingReview
config-carddav-sync-request-timeout
config-system-set-json
container-optimizations
contctsinteraction-usersetting
copy-all-permissions
copy-share-unmasked
copy-update-cache-excluded
copyr-no-empty-newfile
correctParentStorageMtime-id
custom-properties-preload-negative
dav-external-url-encoded-root
dav-file-write-log
dav-fix-birthday-sync
dav-open-log-path
dav-push-sync
dav-webcal-default-refresh-rate
davTagColor
db-error-logging-27
db-error-logging-28
dbQueriesExecStmt
dbQueriesExecStmt2
dbQueriesExecStmt3
dbQueriesToMaster
dbal-exception-query
dbg/noid/perms
debt/federation-qb-mapper
debt/noid/ignore-docker-image-lock-file
debt/noid/simple-file-generic-exception
debt/noid/use-logical-operator
debt/noid/user-changed-event
debt/noid/wrong-return-type-iresponse
debt/noid/wrong-return-type-nullcache
debug-cypress-grid-view
debug-file-exists-backtrace
debug-shares-in-folder-ownerless
debug/31-performance-patches
debug/66440/logs-for-debugging-slow-user-list
debug/72738/log-quota-info-regarding-expiration
debug/doctrine/dbal
debug/failing-notifications
debug/noid/encryption-fail
debug/noid/imaginary
debug/noid/log-ram-usage-with-threshold
debug/noid/log-reason-token-mismatch
debug/noid/log-reason-token-mismatch-stable27
debug/noid/log-reason-token-mismatch-stable29
debug/noid/log-reason-token-mismatch-stable31
debug/preview-invalid-id
debug/snae
def-share-provider-filecache-joins
default-navigation-reuse
deleteExistingTarget
dep/nextcloud
dependabot/composer/aws/aws-sdk-php-3.324.13
dependabot/composer/aws/aws-sdk-php-3.349.3
dependabot/composer/build/integration/behat/behat-3.17.0
dependabot/composer/build/integration/behat/behat-3.18.1
dependabot/composer/build/integration/behat/behat-3.19.0
dependabot/composer/build/integration/behat/behat-3.21.0
dependabot/composer/build/integration/behat/behat-3.21.1
dependabot/composer/build/integration/behat/behat-3.22.0
dependabot/composer/build/integration/behat/behat-3.23.0
dependabot/composer/build/integration/guzzlehttp/guzzle-7.9.3
dependabot/composer/build/integration/stable30/guzzlehttp/guzzle-7.9.3
dependabot/composer/build/integration/stable30/phpunit/phpunit-9.6.22
dependabot/composer/build/integration/stable30/phpunit/phpunit-9.6.23
dependabot/composer/build/integration/stable30/symfony/event-dispatcher-5.4.45
dependabot/composer/build/integration/stable31/behat/behat-3.16.1
dependabot/composer/build/integration/stable31/guzzlehttp/guzzle-7.9.3
dependabot/composer/build/integration/stable31/phpunit/phpunit-9.6.22
dependabot/composer/build/integration/stable31/phpunit/phpunit-9.6.23
dependabot/composer/doctrine/dbal-3.9.x
dependabot/composer/doctrine/dbal-4.0.4
dependabot/composer/egulias/email-validator-4.0.4
dependabot/composer/fusonic/opengraph-3.0.0
dependabot/composer/giggsey/libphonenumber-for-php-lite-8.13.45
dependabot/composer/giggsey/libphonenumber-for-php-lite-8.13.48
dependabot/composer/giggsey/libphonenumber-for-php-lite-9.0.9
dependabot/composer/guzzlehttp/guzzle-7.9.2
dependabot/composer/icewind/streams-0.7.8
dependabot/composer/laravel/serializable-closure-1.3.5
dependabot/composer/mlocati/ip-lib-1.18.1
dependabot/composer/mlocati/ip-lib-1.20.0
dependabot/composer/pear/pear-core-minimal-1.10.16
dependabot/composer/sabre/dav-4.7.0
dependabot/composer/stable28/aws/aws-sdk-php-3.240.11
dependabot/composer/stable30/doctrine/dbal-3.9.1
dependabot/composer/stable30/giggsey/libphonenumber-for-php-lite-8.13.45
dependabot/composer/stable30/guzzlehttp/guzzle-7.8.2
dependabot/composer/stable30/laravel/serializable-closure-1.3.5
dependabot/composer/stable30/mlocati/ip-lib-1.18.1
dependabot/composer/stable30/symfony-3c0242c262
dependabot/composer/stable30/symfony-6.4
dependabot/composer/stable30/web-auth/webauthn-lib-4.8.7
dependabot/composer/symfony-6.4
dependabot/composer/symfony-929f96b730
dependabot/composer/symfony/stable29
dependabot/composer/symfony/string-6.4.13
dependabot/composer/vendor-bin/cs-fixer/nextcloud/coding-standard-1.3.0
dependabot/composer/vendor-bin/cs-fixer/nextcloud/coding-standard-1.3.2
dependabot/composer/vendor-bin/cs-fixer/nextcloud/coding-standard-1.4.0
dependabot/composer/vendor-bin/cs-fixer/stable30/nextcloud/coding-standard-1.2.2
dependabot/composer/vendor-bin/cs-fixer/stable30/nextcloud/coding-standard-1.2.3
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.0.1
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.1.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.2.2
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.3.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.4.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.5.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.5.1
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.5.3
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.6.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.7.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.8.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.8.1
dependabot/composer/vendor-bin/openapi-extractor/stable30/nextcloud/openapi-extractor-1.0.1
dependabot/composer/vendor-bin/phpunit/stable30/phpunit/phpunit-9.6.22
dependabot/composer/vendor-bin/phpunit/stable30/phpunit/phpunit-9.6.23
dependabot/composer/vendor-bin/phpunit/stable31/phpunit/phpunit-9.6.22
dependabot/composer/vendor-bin/phpunit/stable31/phpunit/phpunit-9.6.23
dependabot/composer/vendor-bin/rector/rector/rector-2.0.17
dependabot/composer/vendor-bin/rector/rector/rector-2.0.18
dependabot/composer/vendor-bin/rector/rector/rector-2.1.1
dependabot/composer/vendor-bin/rector/rector/rector-2.1.2
dependabot/composer/wapmorgan/mp3info-0.1.1
dependabot/composer/web-auth/webauthn-lib-4.9.1
dependabot/github_actions/github-actions-062573ba34
dependabot/github_actions/github-actions-1204f2af31
dependabot/github_actions/github-actions-375e75ddd3
dependabot/github_actions/github-actions-3d94f56bd5
dependabot/github_actions/github-actions-510ea978f9
dependabot/github_actions/github-actions-52fdf4f9c4
dependabot/github_actions/github-actions-560ea78344
dependabot/github_actions/github-actions-5765af399d
dependabot/github_actions/github-actions-74498d6e3a
dependabot/github_actions/github-actions-962ddf9a44
dependabot/github_actions/github-actions-96894264d4
dependabot/github_actions/github-actions-a0ac68e364
dependabot/github_actions/github-actions-aa3137d618
dependabot/github_actions/github-actions-e6e62c2646
dependabot/npm_and_yarn/babel-loader-10.0.0
dependabot/npm_and_yarn/babel-loader-9.2.1
dependabot/npm_and_yarn/babel/node-7.25.7
dependabot/npm_and_yarn/babel/node-7.26.0
dependabot/npm_and_yarn/babel/node-7.27.1
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.25.4
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.25.7
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.25.9
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.27.1
dependabot/npm_and_yarn/babel/preset-typescript-7.27.0
dependabot/npm_and_yarn/babel/preset-typescript-7.27.1
dependabot/npm_and_yarn/backbone-1.6.1
dependabot/npm_and_yarn/brace-expansion-1.1.12
dependabot/npm_and_yarn/chenfengyuan/vue-qrcode-2.0.0
dependabot/npm_and_yarn/codecov/webpack-plugin-1.9.1
dependabot/npm_and_yarn/color-5.0.0
dependabot/npm_and_yarn/core-js-3.39.0
dependabot/npm_and_yarn/core-js-3.40.0
dependabot/npm_and_yarn/core-js-3.41.0
dependabot/npm_and_yarn/core-js-3.42.0
dependabot/npm_and_yarn/cross-spawn-7.0.6
dependabot/npm_and_yarn/cypress-13.15.0
dependabot/npm_and_yarn/cypress-13.17.0
dependabot/npm_and_yarn/cypress-14.2.0
dependabot/npm_and_yarn/cypress-14.2.1
dependabot/npm_and_yarn/cypress-14.3.0
dependabot/npm_and_yarn/cypress-14.3.1
dependabot/npm_and_yarn/cypress-14.3.2
dependabot/npm_and_yarn/cypress-14.3.3
dependabot/npm_and_yarn/cypress-14.4.0
dependabot/npm_and_yarn/cypress-axe-1.6.0
dependabot/npm_and_yarn/cypress-if-1.13.2
dependabot/npm_and_yarn/cypress-split-1.24.14
dependabot/npm_and_yarn/cypress-split-1.24.15
dependabot/npm_and_yarn/cypress-split-1.24.17
dependabot/npm_and_yarn/cypress-split-1.24.18
dependabot/npm_and_yarn/cypress-split-1.24.7
dependabot/npm_and_yarn/cypress-split-1.24.9
dependabot/npm_and_yarn/debounce-2.1.1
dependabot/npm_and_yarn/debounce-2.2.0
dependabot/npm_and_yarn/dockerode-4.0.4
dependabot/npm_and_yarn/dockerode-4.0.5
dependabot/npm_and_yarn/dockerode-4.0.6
dependabot/npm_and_yarn/dockerode-4.0.7
dependabot/npm_and_yarn/dompurify-3.1.7
dependabot/npm_and_yarn/dompurify-3.2.4
dependabot/npm_and_yarn/dompurify-3.2.5
dependabot/npm_and_yarn/dompurify-3.2.6
dependabot/npm_and_yarn/elliptic-6.6.0
dependabot/npm_and_yarn/elliptic-6.6.1
dependabot/npm_and_yarn/eslint-plugin-cypress-4.1.0
dependabot/npm_and_yarn/eslint-plugin-cypress-5.0.1
dependabot/npm_and_yarn/focus-trap-7.6.0
dependabot/npm_and_yarn/focus-trap-7.6.4
dependabot/npm_and_yarn/focus-trap-7.6.5
dependabot/npm_and_yarn/http-proxy-middleware-2.0.9
dependabot/npm_and_yarn/is-svg-6.0.0
dependabot/npm_and_yarn/jquery-ui-1.14.0
dependabot/npm_and_yarn/jquery-ui-1.14.1
dependabot/npm_and_yarn/jsdoc-4.0.4
dependabot/npm_and_yarn/jsdom-26.1.0
dependabot/npm_and_yarn/libphonenumber-js-1.11.16
dependabot/npm_and_yarn/libphonenumber-js-1.11.17
dependabot/npm_and_yarn/libphonenumber-js-1.11.9
dependabot/npm_and_yarn/libphonenumber-js-1.12.6
dependabot/npm_and_yarn/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/libphonenumber-js-1.12.8
dependabot/npm_and_yarn/libphonenumber-js-1.12.9
dependabot/npm_and_yarn/linkifyjs-4.3.2
dependabot/npm_and_yarn/marked-14.1.1
dependabot/npm_and_yarn/marked-15.0.0
dependabot/npm_and_yarn/marked-15.0.11
dependabot/npm_and_yarn/marked-15.0.12
dependabot/npm_and_yarn/marked-15.0.4
dependabot/npm_and_yarn/marked-15.0.7
dependabot/npm_and_yarn/marked-15.0.8
dependabot/npm_and_yarn/mime-4.0.6
dependabot/npm_and_yarn/mime-4.0.7
dependabot/npm_and_yarn/moment-timezone-0.5.47
dependabot/npm_and_yarn/moment-timezone-0.5.48
dependabot/npm_and_yarn/moment-timezone-0.6.0
dependabot/npm_and_yarn/multi-206390e743
dependabot/npm_and_yarn/multi-2299424a7d
dependabot/npm_and_yarn/multi-843fc42519
dependabot/npm_and_yarn/multi-9423f4c335
dependabot/npm_and_yarn/multi-cf87d80143
dependabot/npm_and_yarn/multi-d66d039ac5
dependabot/npm_and_yarn/nanoid-3.3.8
dependabot/npm_and_yarn/nextcloud/axios-2.5.1
dependabot/npm_and_yarn/nextcloud/calendar-availability-vue-2.2.4
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.12
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.15
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.9
dependabot/npm_and_yarn/nextcloud/dialogs-6.2.0
dependabot/npm_and_yarn/nextcloud/dialogs-6.3.0
dependabot/npm_and_yarn/nextcloud/eslint-config-8.4.2
dependabot/npm_and_yarn/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/nextcloud/files-3.10.2
dependabot/npm_and_yarn/nextcloud/l10n-3.3.0
dependabot/npm_and_yarn/nextcloud/moment-1.3.4
dependabot/npm_and_yarn/nextcloud/password-confirmation-5.3.1
dependabot/npm_and_yarn/nextcloud/stylelint-config-3.1.0
dependabot/npm_and_yarn/nextcloud/upload-1.6.1
dependabot/npm_and_yarn/nextcloud/vue-8.19.0
dependabot/npm_and_yarn/nextcloud/vue-8.20.0
dependabot/npm_and_yarn/nextcloud/vue-8.25.1
dependabot/npm_and_yarn/nextcloud/vue-8.26.0
dependabot/npm_and_yarn/nextcloud/vue-8.26.1
dependabot/npm_and_yarn/nextcloud/webpack-vue-config-6.3.0
dependabot/npm_and_yarn/node-vibrant-4.0.3
dependabot/npm_and_yarn/p-limit-6.2.0
dependabot/npm_and_yarn/p-queue-8.1.0
dependabot/npm_and_yarn/pbkdf2-3.1.3
dependabot/npm_and_yarn/pinia-2.2.6
dependabot/npm_and_yarn/pinia-2.3.0
dependabot/npm_and_yarn/pinia-2.3.1
dependabot/npm_and_yarn/pinia-3.0.1
dependabot/npm_and_yarn/pinia/testing-0.1.6
dependabot/npm_and_yarn/pinia/testing-0.1.7
dependabot/npm_and_yarn/pinia/testing-1.0.1
dependabot/npm_and_yarn/puppeteer-23.10.4
dependabot/npm_and_yarn/puppeteer-23.4.1
dependabot/npm_and_yarn/puppeteer-23.5.0
dependabot/npm_and_yarn/puppeteer-24.1.0
dependabot/npm_and_yarn/puppeteer-24.10.0
dependabot/npm_and_yarn/puppeteer-24.10.2
dependabot/npm_and_yarn/puppeteer-24.6.1
dependabot/npm_and_yarn/puppeteer-24.7.0
dependabot/npm_and_yarn/puppeteer-24.7.2
dependabot/npm_and_yarn/puppeteer-24.8.0
dependabot/npm_and_yarn/puppeteer-24.8.2
dependabot/npm_and_yarn/puppeteer-24.9.0
dependabot/npm_and_yarn/query-string-9.1.1
dependabot/npm_and_yarn/query-string-9.1.2
dependabot/npm_and_yarn/query-string-9.2.0
dependabot/npm_and_yarn/sass-1.79.3
dependabot/npm_and_yarn/sass-1.81.0
dependabot/npm_and_yarn/sass-1.85.1
dependabot/npm_and_yarn/sass-1.86.3
dependabot/npm_and_yarn/sass-1.87.0
dependabot/npm_and_yarn/sass-1.88.0
dependabot/npm_and_yarn/sass-1.89.0
dependabot/npm_and_yarn/sass-1.89.1
dependabot/npm_and_yarn/sass-loader-16.0.3
dependabot/npm_and_yarn/sass-loader-16.0.5
dependabot/npm_and_yarn/simplewebauthn/browser-11.0.0
dependabot/npm_and_yarn/simplewebauthn/browser-13.1.0
dependabot/npm_and_yarn/simplewebauthn/types-12.0.0
dependabot/npm_and_yarn/stable28/babel/preset-typescript-7.24.7
dependabot/npm_and_yarn/stable28/browserslist-useragent-regexp-4.1.3
dependabot/npm_and_yarn/stable28/cypress-13.13.3
dependabot/npm_and_yarn/stable28/cypress-if-1.12.6
dependabot/npm_and_yarn/stable28/cypress/vue2-2.1.1
dependabot/npm_and_yarn/stable28/dompurify-3.1.7
dependabot/npm_and_yarn/stable28/karma-6.4.4
dependabot/npm_and_yarn/stable28/libphonenumber-js-1.10.64
dependabot/npm_and_yarn/stable28/moment-timezone-0.5.46
dependabot/npm_and_yarn/stable28/nextcloud/calendar-availability-vue-2.2.4
dependabot/npm_and_yarn/stable28/nextcloud/cypress-1.0.0-beta.10
dependabot/npm_and_yarn/stable28/nextcloud/cypress-1.0.0-beta.12
dependabot/npm_and_yarn/stable28/nextcloud/cypress-1.0.0-beta.9
dependabot/npm_and_yarn/stable28/nextcloud/dialogs-5.3.8
dependabot/npm_and_yarn/stable28/nextcloud/moment-1.3.2
dependabot/npm_and_yarn/stable28/nextcloud/password-confirmation-5.1.1
dependabot/npm_and_yarn/stable28/nextcloud/sharing-0.2.4
dependabot/npm_and_yarn/stable28/pinia-2.2.8
dependabot/npm_and_yarn/stable28/pinia/testing-0.1.6
dependabot/npm_and_yarn/stable28/pinia/testing-0.1.7
dependabot/npm_and_yarn/stable28/testing-library/jest-dom-6.4.8
dependabot/npm_and_yarn/stable28/types/jest-29.5.14
dependabot/npm_and_yarn/stable28/underscore-1.13.7
dependabot/npm_and_yarn/stable29/backbone-1.6.1
dependabot/npm_and_yarn/stable29/cypress-split-1.24.11
dependabot/npm_and_yarn/stable29/cypress-split-1.24.14
dependabot/npm_and_yarn/stable29/cypress-split-1.24.9
dependabot/npm_and_yarn/stable29/debounce-2.1.1
dependabot/npm_and_yarn/stable29/dockerode-4.0.3
dependabot/npm_and_yarn/stable29/dockerode-4.0.4
dependabot/npm_and_yarn/stable29/dompurify-3.1.7
dependabot/npm_and_yarn/stable29/dompurify-3.2.5
dependabot/npm_and_yarn/stable29/jquery-ui-1.13.3
dependabot/npm_and_yarn/stable29/jsdoc-4.0.3
dependabot/npm_and_yarn/stable29/jsdoc-4.0.4
dependabot/npm_and_yarn/stable29/libphonenumber-js-1.12.6
dependabot/npm_and_yarn/stable29/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/stable29/mime-4.0.6
dependabot/npm_and_yarn/stable29/mime-4.0.7
dependabot/npm_and_yarn/stable29/moment-timezone-0.5.46
dependabot/npm_and_yarn/stable29/moment-timezone-0.5.47
dependabot/npm_and_yarn/stable29/moment-timezone-0.5.48
dependabot/npm_and_yarn/stable29/nextcloud/calendar-availability-vue-2.2.6
dependabot/npm_and_yarn/stable29/nextcloud/cypress-1.0.0-beta.12
dependabot/npm_and_yarn/stable29/nextcloud/cypress-1.0.0-beta.13
dependabot/npm_and_yarn/stable29/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/stable29/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/stable29/nextcloud/files-3.10.1
dependabot/npm_and_yarn/stable29/nextcloud/files-3.10.2
dependabot/npm_and_yarn/stable29/nextcloud/moment-1.3.2
dependabot/npm_and_yarn/stable29/nextcloud/sharing-0.2.4
dependabot/npm_and_yarn/stable29/nextcloud/upload-1.7.1
dependabot/npm_and_yarn/stable29/nextcloud/upload-1.9.1
dependabot/npm_and_yarn/stable29/nextcloud/vue-8.17.1
dependabot/npm_and_yarn/stable29/pinia-2.3.1
dependabot/npm_and_yarn/stable29/pinia/testing-0.1.7
dependabot/npm_and_yarn/stable29/tar-fs-2.1.3
dependabot/npm_and_yarn/stable29/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/stable29/throttle-debounce-5.0.2
dependabot/npm_and_yarn/stable29/ts-jest-29.1.5
dependabot/npm_and_yarn/stable29/ts-loader-9.5.2
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.34
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.35
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.37
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.38
dependabot/npm_and_yarn/stable29/types/jest-29.5.14
dependabot/npm_and_yarn/stable29/typescript-5.8.3
dependabot/npm_and_yarn/stable29/vue-material-design-icons-5.3.1
dependabot/npm_and_yarn/stable29/vueuse/components-10.11.1
dependabot/npm_and_yarn/stable29/vueuse/core-10.11.1
dependabot/npm_and_yarn/stable29/vueuse/integrations-10.11.1
dependabot/npm_and_yarn/stable30/babel-loader-9.2.1
dependabot/npm_and_yarn/stable30/babel/node-7.26.0
dependabot/npm_and_yarn/stable30/babel/node-7.27.1
dependabot/npm_and_yarn/stable30/babel/plugin-transform-private-methods-7.25.9
dependabot/npm_and_yarn/stable30/babel/plugin-transform-private-methods-7.27.1
dependabot/npm_and_yarn/stable30/babel/preset-typescript-7.27.0
dependabot/npm_and_yarn/stable30/babel/preset-typescript-7.27.1
dependabot/npm_and_yarn/stable30/backbone-1.6.1
dependabot/npm_and_yarn/stable30/core-js-3.41.0
dependabot/npm_and_yarn/stable30/core-js-3.42.0
dependabot/npm_and_yarn/stable30/core-js-3.43.0
dependabot/npm_and_yarn/stable30/cypress-13.13.3
dependabot/npm_and_yarn/stable30/cypress-13.17.0
dependabot/npm_and_yarn/stable30/cypress-axe-1.6.0
dependabot/npm_and_yarn/stable30/cypress-if-1.12.6
dependabot/npm_and_yarn/stable30/cypress-if-1.13.2
dependabot/npm_and_yarn/stable30/cypress-split-1.24.11
dependabot/npm_and_yarn/stable30/cypress-split-1.24.14
dependabot/npm_and_yarn/stable30/cypress-split-1.24.15
dependabot/npm_and_yarn/stable30/cypress-split-1.24.17
dependabot/npm_and_yarn/stable30/cypress-split-1.24.18
dependabot/npm_and_yarn/stable30/cypress-split-1.24.9
dependabot/npm_and_yarn/stable30/cypress/webpack-preprocessor-6.0.4
dependabot/npm_and_yarn/stable30/debounce-2.1.1
dependabot/npm_and_yarn/stable30/dockerode-4.0.3
dependabot/npm_and_yarn/stable30/dockerode-4.0.4
dependabot/npm_and_yarn/stable30/dockerode-4.0.6
dependabot/npm_and_yarn/stable30/dockerode-4.0.7
dependabot/npm_and_yarn/stable30/dompurify-3.1.7
dependabot/npm_and_yarn/stable30/dompurify-3.2.5
dependabot/npm_and_yarn/stable30/dompurify-3.2.6
dependabot/npm_and_yarn/stable30/eslint-plugin-cypress-3.6.0
dependabot/npm_and_yarn/stable30/focus-trap-7.6.4
dependabot/npm_and_yarn/stable30/focus-trap-7.6.5
dependabot/npm_and_yarn/stable30/jasmine-core-2.99.1
dependabot/npm_and_yarn/stable30/jsdoc-4.0.4
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.10
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.11
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.16
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.17
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.18
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.19
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.20
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.9
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.12.8
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.12.9
dependabot/npm_and_yarn/stable30/mime-4.0.6
dependabot/npm_and_yarn/stable30/mime-4.0.7
dependabot/npm_and_yarn/stable30/moment-timezone-0.5.46
dependabot/npm_and_yarn/stable30/moment-timezone-0.5.47
dependabot/npm_and_yarn/stable30/moment-timezone-0.5.48
dependabot/npm_and_yarn/stable30/moment-timezone-0.6.0
dependabot/npm_and_yarn/stable30/nextcloud/auth-2.5.1
dependabot/npm_and_yarn/stable30/nextcloud/axios-2.5.1
dependabot/npm_and_yarn/stable30/nextcloud/calendar-availability-vue-2.2.4
dependabot/npm_and_yarn/stable30/nextcloud/calendar-availability-vue-2.2.6
dependabot/npm_and_yarn/stable30/nextcloud/cypress-1.0.0-beta.13
dependabot/npm_and_yarn/stable30/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/stable30/nextcloud/cypress-1.0.0-beta.15
dependabot/npm_and_yarn/stable30/nextcloud/dialogs-6.2.0
dependabot/npm_and_yarn/stable30/nextcloud/dialogs-6.3.0
dependabot/npm_and_yarn/stable30/nextcloud/dialogs-6.3.1
dependabot/npm_and_yarn/stable30/nextcloud/eslint-config-8.4.2
dependabot/npm_and_yarn/stable30/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/stable30/nextcloud/files-3.10.1
dependabot/npm_and_yarn/stable30/nextcloud/files-3.10.2
dependabot/npm_and_yarn/stable30/nextcloud/l10n-3.3.0
dependabot/npm_and_yarn/stable30/nextcloud/moment-1.3.2
dependabot/npm_and_yarn/stable30/nextcloud/moment-1.3.4
dependabot/npm_and_yarn/stable30/nextcloud/password-confirmation-5.3.1
dependabot/npm_and_yarn/stable30/nextcloud/sharing-0.2.4
dependabot/npm_and_yarn/stable30/nextcloud/upload-1.10.0
dependabot/npm_and_yarn/stable30/nextcloud/upload-1.7.1
dependabot/npm_and_yarn/stable30/nextcloud/upload-1.9.1
dependabot/npm_and_yarn/stable30/nextcloud/vue-8.26.0
dependabot/npm_and_yarn/stable30/nextcloud/vue-8.26.1
dependabot/npm_and_yarn/stable30/nextcloud/vue-8.27.0
dependabot/npm_and_yarn/stable30/nextcloud/webpack-vue-config-6.1.1
dependabot/npm_and_yarn/stable30/nextcloud/webpack-vue-config-6.2.0
dependabot/npm_and_yarn/stable30/p-limit-6.2.0
dependabot/npm_and_yarn/stable30/pinia-2.3.1
dependabot/npm_and_yarn/stable30/pinia/testing-0.1.5
dependabot/npm_and_yarn/stable30/pinia/testing-0.1.6
dependabot/npm_and_yarn/stable30/pinia/testing-0.1.7
dependabot/npm_and_yarn/stable30/puppeteer-24.10.0
dependabot/npm_and_yarn/stable30/puppeteer-24.10.1
dependabot/npm_and_yarn/stable30/puppeteer-24.10.2
dependabot/npm_and_yarn/stable30/puppeteer-24.7.0
dependabot/npm_and_yarn/stable30/puppeteer-24.7.2
dependabot/npm_and_yarn/stable30/puppeteer-24.8.0
dependabot/npm_and_yarn/stable30/puppeteer-24.8.2
dependabot/npm_and_yarn/stable30/query-string-9.1.1
dependabot/npm_and_yarn/stable30/query-string-9.1.2
dependabot/npm_and_yarn/stable30/query-string-9.2.0
dependabot/npm_and_yarn/stable30/query-string-9.2.1
dependabot/npm_and_yarn/stable30/sass-1.87.0
dependabot/npm_and_yarn/stable30/sass-1.88.0
dependabot/npm_and_yarn/stable30/sass-1.89.1
dependabot/npm_and_yarn/stable30/sass-1.89.2
dependabot/npm_and_yarn/stable30/tar-fs-2.1.3
dependabot/npm_and_yarn/stable30/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/stable30/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/stable30/testing-library/user-event-14.6.1
dependabot/npm_and_yarn/stable30/ts-jest-29.2.6
dependabot/npm_and_yarn/stable30/ts-jest-29.3.2
dependabot/npm_and_yarn/stable30/ts-jest-29.3.3
dependabot/npm_and_yarn/stable30/ts-jest-29.4.0
dependabot/npm_and_yarn/stable30/ts-loader-9.5.2
dependabot/npm_and_yarn/stable30/tslib-2.8.1
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.32
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.34
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.35
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.36
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.37
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.38
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.39
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.40
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.41
dependabot/npm_and_yarn/stable30/types/jest-29.5.13
dependabot/npm_and_yarn/stable30/types/jest-29.5.14
dependabot/npm_and_yarn/stable30/typescript-5.8.3
dependabot/npm_and_yarn/stable30/underscore-1.13.7
dependabot/npm_and_yarn/stable30/vue-material-design-icons-5.3.1
dependabot/npm_and_yarn/stable30/vue/tsconfig-0.6.0
dependabot/npm_and_yarn/stable30/vueuse/components-10.11.1
dependabot/npm_and_yarn/stable30/vueuse/core-10.11.1
dependabot/npm_and_yarn/stable30/vueuse/integrations-10.11.1
dependabot/npm_and_yarn/stable30/webpack-5.99.6
dependabot/npm_and_yarn/stable30/webpack-5.99.7
dependabot/npm_and_yarn/stable30/webpack-5.99.8
dependabot/npm_and_yarn/stable30/webpack-5.99.9
dependabot/npm_and_yarn/stable30/workbox-webpack-plugin-7.3.0
dependabot/npm_and_yarn/stable31/babel/node-7.25.9
dependabot/npm_and_yarn/stable31/babel/node-7.26.0
dependabot/npm_and_yarn/stable31/babel/node-7.27.1
dependabot/npm_and_yarn/stable31/babel/plugin-transform-private-methods-7.27.1
dependabot/npm_and_yarn/stable31/babel/preset-typescript-7.27.0
dependabot/npm_and_yarn/stable31/babel/preset-typescript-7.27.1
dependabot/npm_and_yarn/stable31/backbone-1.6.1
dependabot/npm_and_yarn/stable31/core-js-3.41.0
dependabot/npm_and_yarn/stable31/core-js-3.42.0
dependabot/npm_and_yarn/stable31/core-js-3.43.0
dependabot/npm_and_yarn/stable31/cypress-13.15.2
dependabot/npm_and_yarn/stable31/cypress-13.17.0
dependabot/npm_and_yarn/stable31/cypress-axe-1.6.0
dependabot/npm_and_yarn/stable31/cypress-if-1.13.2
dependabot/npm_and_yarn/stable31/cypress-split-1.24.11
dependabot/npm_and_yarn/stable31/cypress-split-1.24.14
dependabot/npm_and_yarn/stable31/cypress-split-1.24.15
dependabot/npm_and_yarn/stable31/cypress-split-1.24.17
dependabot/npm_and_yarn/stable31/cypress-split-1.24.18
dependabot/npm_and_yarn/stable31/cypress-split-1.24.9
dependabot/npm_and_yarn/stable31/dockerode-4.0.4
dependabot/npm_and_yarn/stable31/dockerode-4.0.6
dependabot/npm_and_yarn/stable31/dockerode-4.0.7
dependabot/npm_and_yarn/stable31/dompurify-3.2.5
dependabot/npm_and_yarn/stable31/dompurify-3.2.6
dependabot/npm_and_yarn/stable31/focus-trap-7.6.4
dependabot/npm_and_yarn/stable31/focus-trap-7.6.5
dependabot/npm_and_yarn/stable31/jasmine-core-2.99.1
dependabot/npm_and_yarn/stable31/jquery-ui-1.14.1
dependabot/npm_and_yarn/stable31/jsdoc-4.0.4
dependabot/npm_and_yarn/stable31/karma-coverage-2.2.1
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.11.19
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.11.20
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.12.8
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.12.9
dependabot/npm_and_yarn/stable31/marked-15.0.11
dependabot/npm_and_yarn/stable31/marked-15.0.12
dependabot/npm_and_yarn/stable31/marked-15.0.6
dependabot/npm_and_yarn/stable31/marked-15.0.7
dependabot/npm_and_yarn/stable31/marked-15.0.8
dependabot/npm_and_yarn/stable31/marked-15.0.9
dependabot/npm_and_yarn/stable31/mime-4.0.7
dependabot/npm_and_yarn/stable31/moment-timezone-0.5.47
dependabot/npm_and_yarn/stable31/moment-timezone-0.5.48
dependabot/npm_and_yarn/stable31/moment-timezone-0.6.0
dependabot/npm_and_yarn/stable31/nextcloud/auth-2.5.1
dependabot/npm_and_yarn/stable31/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/stable31/nextcloud/cypress-1.0.0-beta.15
dependabot/npm_and_yarn/stable31/nextcloud/dialogs-6.2.0
dependabot/npm_and_yarn/stable31/nextcloud/dialogs-6.3.0
dependabot/npm_and_yarn/stable31/nextcloud/dialogs-6.3.1
dependabot/npm_and_yarn/stable31/nextcloud/eslint-config-8.4.2
dependabot/npm_and_yarn/stable31/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/stable31/nextcloud/files-3.10.2
dependabot/npm_and_yarn/stable31/nextcloud/l10n-3.3.0
dependabot/npm_and_yarn/stable31/nextcloud/moment-1.3.4
dependabot/npm_and_yarn/stable31/nextcloud/stylelint-config-3.1.0
dependabot/npm_and_yarn/stable31/nextcloud/upload-1.10.0
dependabot/npm_and_yarn/stable31/nextcloud/vue-8.26.0
dependabot/npm_and_yarn/stable31/nextcloud/vue-8.26.1
dependabot/npm_and_yarn/stable31/nextcloud/vue-8.27.0
dependabot/npm_and_yarn/stable31/p-limit-6.2.0
dependabot/npm_and_yarn/stable31/pinia-2.3.1
dependabot/npm_and_yarn/stable31/puppeteer-24.10.0
dependabot/npm_and_yarn/stable31/puppeteer-24.10.1
dependabot/npm_and_yarn/stable31/puppeteer-24.10.2
dependabot/npm_and_yarn/stable31/puppeteer-24.7.2
dependabot/npm_and_yarn/stable31/puppeteer-24.8.0
dependabot/npm_and_yarn/stable31/puppeteer-24.8.2
dependabot/npm_and_yarn/stable31/puppeteer-24.9.0
dependabot/npm_and_yarn/stable31/query-string-9.1.1
dependabot/npm_and_yarn/stable31/query-string-9.1.2
dependabot/npm_and_yarn/stable31/query-string-9.2.0
dependabot/npm_and_yarn/stable31/query-string-9.2.1
dependabot/npm_and_yarn/stable31/sass-1.81.1
dependabot/npm_and_yarn/stable31/sass-1.87.0
dependabot/npm_and_yarn/stable31/sass-1.88.0
dependabot/npm_and_yarn/stable31/sass-1.89.0
dependabot/npm_and_yarn/stable31/sass-1.89.1
dependabot/npm_and_yarn/stable31/sass-1.89.2
dependabot/npm_and_yarn/stable31/sass-loader-16.0.4
dependabot/npm_and_yarn/stable31/sass-loader-16.0.5
dependabot/npm_and_yarn/stable31/stylelint-16.18.0
dependabot/npm_and_yarn/stable31/stylelint-16.20.0
dependabot/npm_and_yarn/stable31/stylelint-16.21.0
dependabot/npm_and_yarn/stable31/tar-fs-2.1.3
dependabot/npm_and_yarn/stable31/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/stable31/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/stable31/testing-library/user-event-14.6.1
dependabot/npm_and_yarn/stable31/ts-loader-9.5.2
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.34
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.35
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.37
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.38
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.39
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.40
dependabot/npm_and_yarn/stable31/vitest/coverage-v8-2.1.9
dependabot/npm_and_yarn/stable31/vue/tsconfig-0.6.0
dependabot/npm_and_yarn/stable31/vueuse/components-11.3.0
dependabot/npm_and_yarn/stable31/vueuse/integrations-11.3.0
dependabot/npm_and_yarn/stable31/wait-on-8.0.2
dependabot/npm_and_yarn/stable31/wait-on-8.0.3
dependabot/npm_and_yarn/stable31/webpack-5.99.6
dependabot/npm_and_yarn/stable31/webpack-5.99.7
dependabot/npm_and_yarn/stable31/webpack-5.99.8
dependabot/npm_and_yarn/stable31/webpack-5.99.9
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.57
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.60
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.61
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.62
dependabot/npm_and_yarn/stylelint-16.17.0
dependabot/npm_and_yarn/stylelint-16.18.0
dependabot/npm_and_yarn/stylelint-16.19.1
dependabot/npm_and_yarn/tar-fs-2.1.3
dependabot/npm_and_yarn/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/testing-library/user-event-14.6.1
dependabot/npm_and_yarn/testing-library/vue-8.1.0
dependabot/npm_and_yarn/ts-loader-9.5.2
dependabot/npm_and_yarn/tslib-2.7.0
dependabot/npm_and_yarn/types/dockerode-3.3.32
dependabot/npm_and_yarn/types/dockerode-3.3.37
dependabot/npm_and_yarn/types/dockerode-3.3.38
dependabot/npm_and_yarn/typescript-5.6.2
dependabot/npm_and_yarn/typescript-5.8.2
dependabot/npm_and_yarn/typescript-5.8.3
dependabot/npm_and_yarn/undici-5.29.0
dependabot/npm_and_yarn/vite-6.2.5
dependabot/npm_and_yarn/vite-6.3.4
dependabot/npm_and_yarn/vitejs/plugin-vue2-2.3.3
dependabot/npm_and_yarn/vitest-3.0.4
dependabot/npm_and_yarn/vitest-3.0.8
dependabot/npm_and_yarn/vitest-3.0.9
dependabot/npm_and_yarn/vitest-3.1.2
dependabot/npm_and_yarn/vitest-3.1.3
dependabot/npm_and_yarn/vitest-3.1.4
dependabot/npm_and_yarn/vitest/coverage-v8-2.1.1
dependabot/npm_and_yarn/vitest/coverage-v8-2.1.5
dependabot/npm_and_yarn/vitest/coverage-v8-2.1.8
dependabot/npm_and_yarn/vitest/coverage-v8-3.0.7
dependabot/npm_and_yarn/vitest/coverage-v8-3.1.3
dependabot/npm_and_yarn/vitest/coverage-v8-3.2.2
dependabot/npm_and_yarn/vitest/coverage-v8-3.2.3
dependabot/npm_and_yarn/vue-cropperjs-5.0.0
dependabot/npm_and_yarn/vue-loader-16.8.3
dependabot/npm_and_yarn/vue-loader-17.4.2
dependabot/npm_and_yarn/vue-material-design-icons-5.3.1
dependabot/npm_and_yarn/vue-router-4.5.0
dependabot/npm_and_yarn/vue/tsconfig-0.6.0
dependabot/npm_and_yarn/vue/tsconfig-0.7.0
dependabot/npm_and_yarn/vueuse/components-11.1.0
dependabot/npm_and_yarn/vueuse/components-11.3.0
dependabot/npm_and_yarn/vueuse/components-12.8.2
dependabot/npm_and_yarn/vueuse/core-11.3.0
dependabot/npm_and_yarn/vueuse/core-12.5.0
dependabot/npm_and_yarn/vueuse/core-13.1.0
dependabot/npm_and_yarn/vueuse/integrations-11.1.0
dependabot/npm_and_yarn/vueuse/integrations-11.3.0
dependabot/npm_and_yarn/vueuse/integrations-12.7.0
dependabot/npm_and_yarn/vueuse/integrations-13.0.0
dependabot/npm_and_yarn/vuex-4.1.0
dependabot/npm_and_yarn/wait-on-8.0.0
dependabot/npm_and_yarn/wait-on-8.0.1
dependabot/npm_and_yarn/wait-on-8.0.3
dependabot/npm_and_yarn/webdav-5.7.1
dependabot/npm_and_yarn/webdav-5.8.0
dependabot/npm_and_yarn/webpack-5.98.0
dependabot/npm_and_yarn/webpack-5.99.5
dependabot/npm_and_yarn/webpack-5.99.6
dependabot/npm_and_yarn/webpack-5.99.7
dependabot/npm_and_yarn/webpack-5.99.8
dependabot/npm_and_yarn/webpack-5.99.9
dependabot/npm_and_yarn/webpack-cli-6.0.1
dependabot/npm_and_yarn/workbox-webpack-plugin-7.3.0
dependabot/npm_and_yarn/zip.js/zip.js-2.7.53
dependabot/npm_and_yarn/zip.js/zip.js-2.7.54
dependabot/npm_and_yarn/zip.js/zip.js-2.7.57
dependabot/npm_and_yarn/zip.js/zip.js-2.7.61
dependabot/npm_and_yarn/zip.js/zip.js-2.7.62
dependabotjulia/bump-nextcloud-upload
dependaniel/aws-sdk-for-28
dependaniel/aws-sdk-for-29
deps/noid/bump-3rdparty-hash
depskjnldsv/vue
dept-remove-csrf-dependency-from-request
detect-inadvertent-config-overlaps
direct-access-shared-calendar
do-not-show-password-dialog-when-user-can-not-validate-password
docs/53002/calendar-search
docs/53002/calendar-search-impl
docs/caldav/getCalendarsForUserCount
docs/http/cors-attribute
dont-check-share-folder-remote
dont-double-scan-storage
ehn/sharing-sidebar-hide-search-labels
encoding-wrapper-metadata
encryption-no-header-size-error
encryption-version-version
enh/30551/weather-status-support-more-codes
enh/49868/add-display-override
enh/49868/adjust-display-mode
enh/add-cloud-id-chars
enh/add-details-to-code-integrity-check
enh/add-first-login-timestamp
enh/add-info-to-ldap-test-user-settings
enh/add-rich-object-formatter
enh/add-user-creation-date
enh/apply-rector-set-to-apps
enh/displayname-group-search
enh/do-not-enforce-cache-for-cli
enh/favorite-search
enh/identityproof/key_storage
enh/improve-transfer-ownership-logging
enh/issue-48528-disable-imip-messages
enh/issues-563-calendar-import-export
enh/ldap-add-test-settings-command
enh/ldap-clearer-errors
enh/ldap/more-error-output
enh/limit-ldap-user-count
enh/make-tag-event-webhook-compatible
enh/more-task-types
enh/no-issue/better-error-for-login-csrf
enh/no-issues/share-entry-link
enh/noid/add-types-to-issue-templates
enh/noid/allow-configure-config.owner
enh/noid/allow-disable-pwas
enh/noid/appconfig-get-fast-keys
enh/noid/async-process-run
enh/noid/avatar-chinese
enh/noid/clean-migration-check-appconfig
enh/noid/default-config-based-on-system-conf
enh/noid/disable-bulk-upload
enh/noid/disable-user-unmount
enh/noid/ensure-correctly-handling-special-characters
enh/noid/fix-docs-ci
enh/noid/fix-personal-settings-layout
enh/noid/fix-properties-files
enh/noid/gs.federation.auto_accept_shares
enh/noid/navigationentryevent
enh/noid/nullable-range
enh/noid/return-default-value-from-lexicon
enh/noid/returns-formated-app-values-2
enh/noid/signed-request
enh/noid/taskpro-agency-audio-chat
enh/noid/taskpro-audio-chat
enh/noid/taskprocessing-commands-task-errors
enh/noid/taskprocessing-include-error-msg-in-tasks
enh/noid/test-ci
enh/noid/testing-namespace
enh/noid/update-o.c.u-wording
enh/noid/user-preferences
enh/noid/workflow-contextchat-filesaccesscontrol-warning
enh/opcache-checks
enh/repair-mimetype-job
enh/share-sidebar
enh/test-mtime-after-move
enh/trashbin-scan-command
enh/users-configured-quota-value
enh/xss-protection-check
enhancement/passwordless-login-token
enhancements/files-sharing-tests
ensure-cloud-key
ensureTemplateFolder
ernolf/configurable_sharetoken_length
ext-store-check-update-filter
extract-caldav-sharing-plugin
feat-setupcheck-php-sapi-fpm-max-children
feat/26668/notifications-for-shared-calendars-2
feat/31420/bidi-backend-support
feat/42647/hide-app-password-note-without-2fa
feat/45085/validate-config-values
feat/46528/ask-confirm-extension-change
feat/47176/show-share-expiry
feat/52635/toggle-for-trusted-server-sharing
feat/54114/reportSlowPropfinds
feat/add-addressbook-list-command
feat/add-config-for-share-perm
feat/add-configurable-ipv6-subnet
feat/add-datetime-qbmapper-support
feat/add-directory-check-workflowengine
feat/add-mount-change-log
feat/add-preload-script
feat/add-proofread-tasktype
feat/add-query-param-to-force-language
feat/add-rector-config
feat/add-search-everywhere-button
feat/add-subscription-via-occ
feat/add-user-enabled-apps-ocs
feat/add-wcf-cap
feat/add_log_scan_command
feat/ai-guest-restriction
feat/allow-account-local-search
feat/allow-enum-entity
feat/allow-getter-setter-decl-fors
feat/allow-oauth-grant-bypass
feat/allow-to-configure-default-view
feat/ask-deletion
feat/auto-accept-trusted-server
feat/auto-sync-desktop-version
feat/cache-routes
feat/caldav/migrate-to-sabre-sharing-plugin
feat/caption-cant-upload
feat/cardav-example-contact
feat/certificatemanager/default-bundle-path-option
feat/check-enterprise
feat/cleanup-oc-util
feat/cleanup-oc-util-methods
feat/clipboard-fallback
feat/contacts-menu/js-hook-action
feat/context-chat-ocp
feat/conversion-adjusting
feat/core/features-api
feat/core/install-without-admin-user
feat/core/pwa-hide-header
feat/cors-on-webdav
feat/cron/before-after-events
feat/cypress-setup
feat/dark-mode-variables
feat/database/primary-replica-split-stable28
feat/database/query-result-fetch-associative-fetch-num
feat/dav-pagination
feat/dav-trashbin-backend
feat/dav/absence-get-set-commands
feat/dav/calendar-obj-event-webhooks
feat/dav/calendar-object-admin-audit-log
feat/dav/public-share-chunked-upload
feat/declarative-settings/typed-abstraction
feat/delete-separator
feat/disable-share-deletion
feat/dispatcher/log-raw-response-data
feat/drop-compile-commits-rebase
feat/edit-share-token
feat/empty-trash
feat/example-event
feat/expose-nc-groups-to-system-addressbook-contacts
feat/federated-calendar-sharing
feat/file-conversion-provider
feat/file-conversion-provider-front
feat/file-drop-recursive
feat/file-list-actions
feat/files-bulk-tagging
feat/files-bulk-tagging-followup
feat/files-home-view
feat/files-row-height
feat/files-shortcuts
feat/files-shortcuts-2
feat/files/chunked-upload-config-capabilities
feat/files/resumable-uploads
feat/files_sharing/co-owner
feat/files_trashbin/allow-preventing-trash-permanently
feat/getByAncestorInStorage
feat/hint-hidden
feat/http/request-header-attribute
feat/ignore-warning-files
feat/image-size-metadata
feat/imailaddressvalidator
feat/issue-3786-allow-shared-calendars
feat/issue-563-calendar-export
feat/issue-563-calendar-import
feat/issue-994-two-factor-api
feat/larger_ipv6_range
feat/lexicon/moving-out-from-unstable
feat/log-client-side-req-id
feat/log-large-assets
feat/log/log-session-id
feat/logger-allow-psr-loglevel
feat/mail-provider-settings
feat/make-setup-check-trait-public
feat/make-tasks-types-toggleable
feat/material-icons-outline
feat/maxschmi-49902
feat/meeting-proposals
feat/migrate-files_external-vue
feat/mime-column
feat/mime-names
feat/mimes-names
feat/mountmanager/emit-events
feat/namespace-group-route
feat/nfo
feat/no-issue/add-logging-preview-generation
feat/no-issue/show-remote-shares-as-internal-config
feat/no-two-factor-required-attribute
feat/node-dist
feat/noid/add-bulk-activity
feat/noid/add-busy-status
feat/noid/add-command-to-list-all-routes
feat/noid/add-fake-summary-provider
feat/noid/allow-specifying-related-object
feat/noid/check-integrity-all-apps
feat/noid/files-external-lexicon
feat/noid/get-value-type-from-lexicon
feat/noid/happy-birthday
feat/noid/info-xml-spdx-license-ids
feat/noid/internal-lint-request-event
feat/noid/lexicon-configurable-default-value
feat/noid/lexicon-events
feat/noid/lexicon-migrate-keys
feat/noid/lexicon-store-on-get-as-default
feat/noid/link-to-calendar-event
feat/noid/list-addressbook-shares
feat/noid/log-query-parameters
feat/noid/occ-list-delete-calendar-subscription
feat/noid/preset-config
feat/noid/priority-notifications
feat/noid/profile-data-api
feat/noid/ratelimit-header
feat/noid/show-nice-label-when-searching-in-root
feat/noid/store-lexicon-default
feat/noid/support-email-mentions
feat/occ-files-cleanup-help
feat/occ/command-events
feat/ocp-sanitize-filenames
feat/ocp/attendee-availability-api
feat/ocp/meetings-api-requirements
feat/openapi/merged-spec
feat/oracle-setup-cypres
feat/order-action
feat/package-node-npm-engines-update
feat/pagination-cardav
feat/photo-cache-avif
feat/photo-cache-webp
feat/php-setup-file-upload
feat/postgres-13-17
feat/preset/custom-share-token
feat/preset/load-apps-on-preset
feat/profile-app
feat/psalm/error-deprecations
feat/public-log-level
feat/reduce_available_languages_set
feat/repair-step-deduplicate-mounts
feat/requestheader/indirect-parameter
feat/restore-to-original-dir
feat/restrict-tag-creation
feat/rich-profile-biography
feat/router-list-routs-cmd
feat/row_format_check
feat/s3/sse-c
feat/sanitize-filenames-command
feat/search-by-parent-id
feat/search-in-files
feat/search-in-files--small
feat/search-while-filtering
feat/sensitive-declarative-settings
feat/settings/advanced-deploy-options
feat/settings/app_api/daemon-selection
feat/settings/app_api_apps_management
feat/settings/too-much-caching-setup-check
feat/setup
feat/setup-check-logging
feat/setup-checks
feat/setupcheck-task-pickup-speed
feat/share-grid-view
feat/sharing-title
feat/shipped/app_api
feat/show-hide-ext
feat/show-time-diff-user
feat/switch-from-settype-to-casts
feat/sync-truncation
feat/sync-truncation2
feat/sync-truncation3
feat/systemtags-bulk-create-list
feat/systemtags-missing-attrs
feat/systemtags-public
feat/tags-colors
feat/tags-colors-2
feat/talk-9679/threads
feat/task/analyze-image
feat/taskprocessing/TextToImageSingle
feat/template-field-extraction-improvements
feat/test-app-routes
feat/unified_search/online_providers
feat/use-php84-lazy-objects
feat/user-folder
feat/user-get-quota-bytes
feat/verbose-cron
feat/vue-material-icons-outline
feat/workflow-auto-update-cypress.yml
feat/workflow-auto-update-node.yml
feat/workflow-auto-update-npm-audit-fix.yml
feat/workflow-auto-update-pr-feedback.yml
feat/workflow-auto-update-reuse.yml
feat/workflow-generator
feat/zip-folder-plugin
feat/zst
feature/23308/create-new-favorite-dashboard-widget
feature/51791/add-bsky-option-to-accounts
feature/53428-autoCreateCollectionOnUpload
feature/add-allowed-view-extensions-config
feature/add-profile-to-occ
feature/files-list-occ-command
feature/hide-external-shares-excluded-groups
feature/highlight-active-menu
feature/noid/config-lexicon
feature/noid/wrapped-appconfig
feature/settings-design-improvements
fetch-mount-memory
fetch-mount-memory-30
fetch-mount-memory-30-squash
fieat/profile-pronounces
file-info-key-location-27
filePointerCheck
filecache-chunking
files-cache-node
files-external-optional-dependencies
files-external-setup-path
filesVersionsFuncRefact
files_external-scan-unscanned
fileutils-files-by-user
fix-44318-remote-share-not-listed
fix-button-alignment-for-email-templates-in-outlook
fix-clearing-unified-search-when-modal-is-closed
fix-copying-or-moving-from-shared-groupfolders
fix-dav-properties-column-type
fix-endless-spinner-on-file-entries-after-triggering-an-action-on-stable30
fix-enforce-theme-for-public-links
fix-federated-group-shares-when-no-longer-found-in-remote-server
fix-files-external-smbclient-deprecated-binaryfinder
fix-jobs-app-disable
fix-json-decoding-groups-excluded-from-share
fix-nc-env-inclusion
fix-papercut-23486-weather-status-locale
fix-putcsv-default
fix-remove-auto-guessing-for-preview-semaphore
fix-running-files-external-s3-tests-in-stable30-ci
fix-setupcheck-filelocking
fix-setupcheck-webfinger-400
fix-setupchecks-normalizeUrl-url-filter
fix-sharing-expiration-notify
fix-show-original-owner
fix-theming-for-disabled-accounts
fix-theming-for-disabled-users
fix-updater-secret
fix-user-collaborators-returned-when-searching-for-mail-collaborators
fix/29-template-layout
fix/30-oc-files
fix/30-template-layout
fix/32bit-pack
fix/32bit-support
fix/43260
fix/44288/catch-filesmetadatanotfound-exception
fix/44492/settings-remove-user-manager
fix/45717/hide-last-modified-for-shipped-apps
fix/45884/accept-notification
fix/45982/hide-move-action
fix/46920/respect-no-download
fix/47275/driverException
fix/47658/upgrade-version-3100005
fix/48012/fix-share-email-send-mail-share
fix/48415/do-not-rename-main-share-link
fix/48437/dont-exclude-user
fix/48829/visual-feedback-4-encryption-toggle
fix/48860/stop-silent-expiry-date-addition-on-link-shares
fix/48993
fix/49431-automatically-disable-sab
fix/49473/task-url
fix/49584-background-worker-interval-fixes
fix/49584-background-worker-remove-interval
fix/49638/update-prefs-indexes
fix/49728/adapt-search-filters-correctly
fix/49887/early-check-for-overwritten-home
fix/49909/workflow-vue-compat
fix/49954/add-send-mail-toggle
fix/50177/movy-copy-e2e-tests
fix/50215/hideCreateTemplateFolder
fix/50363/correct-system-tags-i18n
fix/50512/send-password-2-owner
fix/50788/pass-hide-download-on-save
fix/51022/simpler-request-before-upgrade
fix/51022/simpler-request-pre-upgrade
fix/51226/show-remote-shares-as-external
fix/51226/show-remote-shares-as-external-2
fix/51506/mdast-util-gfm-autolink-literal-override
fix/51833/add-retries-to-s3-client
fix/51875/allow-keyboard-input-4-share-expiration-on-chrome
fix/52060/manage-download-on-federated-reshare
fix/52131/ignore-missing-themes-31
fix/52278/remove-unused-etag-check
fix/52590/available-account-groups
fix/52617/fix-group-admin-delegation
fix/52794/share-advanced-settings
fix/52795/consistent-share-save-behavior
fix/53363/available-groups
fix/53674-webdav-paginate-missing-collection-type
fix/54080/using-userconfig-to-set-lang
fix/78296/nextcloud-vue
fix/788/add-password-confirmation-required-to-user-storage-create
fix/788/add-password-required-to-external-storages
fix/AppStore--remove-unneeded-warning
fix/FileList-render
fix/IMimeTypeDetector-types
fix/PasswordConfirmationMiddleware-empty-header
fix/PublicShareUtils
fix/account-manager
fix/account-mgmnt-settings
fix/account-property-validation
fix/activity-log-for-favorites-in-dav
fix/add-autoload.php-for-tests
fix/add-calendar-object-index
fix/add-function-type-for-mimetype-sanitizer
fix/add-getappversions-replacement
fix/add-password-confirmation-to-save-global-creds
fix/addUniqueMountpointIndex
fix/adjust-default-color-background-plain-to-new-background
fix/admin-tag-color-prevent
fix/ai-settings
fix/align-avatar-visibility
fix/allconfig-use-search-case-insensitive
fix/allow-255-filenames
fix/allow-download-with-hide-download-flag
fix/allow-enforcing-windows-support
fix/allow-quota-wrapper-check
fix/alter-invite-attachment-filename-and-type
fix/app-discover
fix/app-discover-section-media
fix/app-store-groups
fix/app-store-markdown
fix/app-store-reactivity
fix/app-store-remove-force-enable
fix/appconfig/sensitive-keys-external-jwt-private-key
fix/appframework/csrf-request-checks
fix/apps/wrong-missing-casts
fix/appstore-regressions
fix/auth-token-uniq-constraint-violation-handling
fix/auth/authtoken-activity-update-in-transaction
fix/auth/logout-redirect-url
fix/auto-reload-tags
fix/avoid-crashing-versions-listener-on-non-existing-file
fix/avoid-invalid-share-on-transfer-ownership
fix/background-image
fix/backgroundjobs/adjust-intervals-time-sensitivities
fix/backport-gridview-29
fix/baseresponse/xml-element-value-string-cast
fix/better-drag-n-drop
fix/bring-back-hide-downlaod
fix/bring-back-zip-event
fix/broken-event-notifications
fix/cache-hit-getFirstNodeById
fix/cache-ldap-configuration-prefixes
fix/cachebuster-stable30
fix/caldav/event-organizer-interaction
fix/caldav/event-reader-duration
fix/caldav/no-invitations-to-circles
fix/caldav/use-direct-route-event-activity
fix/carddav/create-sab-concurrently
fix/cast-node-names-to-string
fix/catch-exception-in-encrypt-all
fix/catch-exception-in-encryption-listener
fix/clarify-app-manager-methods
fix/clean-up-group-shares
fix/cleanup-blurhash-images
fix/cleanup-dependencyanalyser
fix/cleanup-dicontainer
fix/cleanup-getinstallpath
fix/cleanup-loadapp-calls
fix/cleanup-servercontainer
fix/cleanup-template-functions
fix/cleanup-test-legacy-autoloader
fix/cleanup-updater-class
fix/cleanup-user-backends
fix/cloud-id-input
fix/code-sign-test
fix/codeowner-nc-backend
fix/collaboration/deduplicate-email-shares
fix/colum-sizes-outline-icon
fix/comment/children-count-integer
fix/comments-outlined-icons
fix/comments/activity-rich-subject-parameters
fix/composer/autoload-dev-deps
fix/config/additional-configs
fix/config/return-user-config-deleted
fix/contactsmenu/padding
fix/contactsmigratortest
fix/conversion-extension
fix/convert-log
fix/convert-rotate-to-timedjob
fix/convert-schedulednotifications-to-timedjob
fix/convert-type
fix/core-cachebuster
fix/core-session-logout-logging
fix/core/password-from-env-nc-pass
fix/core/preview-generation
fix/create-missing-replacement-indexes
fix/credential-passwordless-auth
fix/cron-strict-cookie
fix/cron/log-long-running-jobs-stable26
fix/cron/no-constructor-without-args
fix/csrf-token-ignore-twofactor
fix/current-user-principal
fix/cy-selectors-for-files-trashbin
fix/dashboard--performance-and-refactoring
fix/dashboard/dont-load-hidden-widgets-initially
fix/dashboard/skip-hidden-widgets
fix/datadirectory-protection-setupcheck
fix/dav-add-strict-type-declarations
fix/dav-cast-content-lenght-to-int
fix/dav-cast-params-to-string
fix/dav-csrf
fix/dav-harden-stream-handling
fix/dav-nickname-master
fix/dav-nickname-stable31
fix/dav-sorting
fix/dav/abort-incomplete-caldav-changes-sync
fix/dav/absence-status-too-long
fix/dav/carddav-new-card-check-addressbook-early
fix/dav/carddav-read-card-memory-usage
fix/dav/create-sab-in-transaction
fix/dav/create-sab-install
fix/dav/first-login-listener
fix/dav/image-export-plugin-fallback
fix/dav/limit-sync-token-created-at-updates-stable28
fix/dav/limit-sync-token-created-at-updates-stable29
fix/dav/orphan-cleanup-job
fix/dav/publicremote-share-token-pattern
fix/dav/remove-object-properties-expensive
fix/dav/update-rooms-resources-background-job
fix/dav/use-iuser-displayname
fix/dav/view-only-check
fix/db-adapter-insert-if-not-exists-atomic
fix/declarative-settings-priority
fix/default-contact
fix/default-contact-error-verbosity
fix/defaultshareprovider/filter-reshares-correctly
fix/delete-legacy-autoloader
fix/deprecate-oc-template-and-cleanup
fix/deprecation-comment
fix/deps/php-seclin
fix/destination-drop-check
fix/disable-reminder-invalid-nodes
fix/do-not-cache-routes-on-debug-mode
fix/do-not-remind
fix/do-not-throw-from-countusers
fix/do-not-update-userkey-when-masterkey-is-used
fix/docblock-color
fix/docs
fix/download-non-files-view
fix/download-perms
fix/drop-file-preview
fix/drop-v-html
fix/duplicated-conflict-resolution
fix/dyslexia-font-not-loading
fix/edit-locally-labels
fix/emit_hooks_on_copy
fix/empty-file-0byte-stable30
fix/encode-guest-file-request
fix/encoding-wrapper-scanner
fix/encoding-wrapper-scanner-stable30
fix/encrypt-decrypt-password
fix/encryption-events
fix/encryption-text
fix/encryption/web-ui-bogus
fix/entity/strict-types
fix/eslint-warning
fix/eslint-warnings
fix/etag-constraint-search-query
fix/external-storage-controller-cast-id
fix/external-storage-int
fix/fail-safe-files-actions
fix/fav-sort-nav
fix/federated-share-opening
fix/federated-users
fix/federatedfilesharing/dialog-callback
fix/federatedfilesharing/group-cleanup
fix/federation-certificate-store
fix/file-conversion-missing-extension
fix/file-drop
fix/file-list-filters-reset
fix/file-name-validator-case-sensitivity
fix/file-type-filter-state
fix/file_reference_invalidate_rename
fix/files--handle-empty-view-with-error
fix/files--list-header-button-title
fix/files-actions-menu-position
fix/files-actions-subcomponent
fix/files-add-move-info
fix/files-better-search-icon
fix/files-duplicated-nodes
fix/files-external-notify-mount-id-stable28
fix/files-external-workflow
fix/files-failed-node
fix/files-header-empty-view
fix/files-header-submenu
fix/files-hidden-summary
fix/files-mtime
fix/files-navigation-quota-total
fix/files-new-folder
fix/files-page-title
fix/files-plural
fix/files-position-navigation
fix/files-proper-loading-icon
fix/files-public-share
fix/files-reload
fix/files-rename
fix/files-rename-esc
fix/files-rename-folder
fix/files-rename-store
fix/files-renaming
fix/files-scroll-perf
fix/files-sharing-download
fix/files-sharing-file-drop-folder
fix/files-sharing-label
fix/files-show-details-when-no-action
fix/files-summary
fix/files-trash-download
fix/files-trashbin-files-integration
fix/files-version-creation
fix/files-versions
fix/files-versions-author
fix/files-versions-listeners
fix/files-wording
fix/files/activity-rich-object-strings
fix/files/delete-display-no-trashbin
fix/files/favorites-widget-folder-preview
fix/files/preview-service-worker-registration
fix/files/reactivity-inject
fix/files/sort-after-view-change
fix/files_external-cred-dialog
fix/files_external/definition-parameter
fix/files_external/forbidden-exception
fix/files_external/hidden-password-fields
fix/files_external/smb-case-insensitive-path-building
fix/files_external_scan
fix/files_sharing--global-search-in-select
fix/files_sharing/advanced-settings-delete-share-button
fix/files_sharing/cleanup-error-messages
fix/files_sharing/disable-editing
fix/files_sharing/filter-own-reshared-shares
fix/files_sharing/harden-api
fix/files_sharing/hide-own-reshares
fix/files_sharing/ocm-permissions
fix/files_sharing/sharing-entry-link-override-expiration-date
fix/files_versions/previews
fix/filesreport-cast-fileId-to-int
fix/filter-empty-email
fix/filter-for-components-explicitly
fix/fix-32bits-phpunit
fix/fix-admin-audit-event-listening
fix/fix-admin-audit-listener
fix/fix-admin-audit-paths
fix/fix-appmanager-cleanappid
fix/fix-copy-to-mountpoint-root
fix/fix-cypress-note-to-recipient
fix/fix-default-share-folder-for-group-shares
fix/fix-di-when-casing-is-wrong
fix/fix-disabled-user-list-for-saml-subadmin
fix/fix-disabled-user-list-for-subadmins
fix/fix-email-setupcheck-with-null-smtpmode
fix/fix-email-share-transfer-accross-storages
fix/fix-encryption-manager-injection
fix/fix-incorrect-query-in-federatedshareprovider
fix/fix-int-casting
fix/fix-ldap-setupcheck-crash
fix/fix-loginflow-v1
fix/fix-movie-preview-construct
fix/fix-php-error-on-upgrade
fix/fix-psalm-taint-errors
fix/fix-psalm-taint-errors-2
fix/fix-public-download-activity
fix/fix-server-tests
fix/fix-share-creation-error-messages
fix/fix-storage-interface-check
fix/fix-warning-lazy-ghost-application
fix/flaky-cypress
fix/flaky-live-photos
fix/forbidden-files-insensitive
fix/forward-user-login-if-no-session
fix/get-managers-as-subadmin
fix/get-version-of-core
fix/gracefully-parse-trusted-certificates
fix/grid-view-actions
fix/group-admin-new-user
fix/handle-errors-in-migrate-key-format
fix/harden-account-properties
fix/harden-admin-settings
fix/harden-template-functions
fix/harden-thumbnail-endpoint
fix/harmonize-ldap-function-logging
fix/headers-lifecycle
fix/highcontras-scrollbar
fix/http/jsonresponse-data-type
fix/http/template-valid-status-codes
fix/icons-header-meu
fix/imip-test-expects-integer
fix/improve-error-output-of-sso-test
fix/improve-init-profiling
fix/improve-ldap-avatar-handling
fix/index-systemtags
fix/insecure-crypto-env
fix/install-app-before-enable
fix/install-dbport-unused
fix/installation-wording
fix/invalid-app-config
fix/invalid-copied-share-link
fix/invalid-mtime
fix/invitations-named-parameter
fix/issue-12387-delete-invitations
fix/issue-13862
fix/issue-23666
fix/issue-3021-return-no-content-instead-of-error
fix/issue-34720
fix/issue-47879-property-serialization
fix/issue-48079-windows-time-zones
fix/issue-48528-disable-itip-and-imip-messages
fix/issue-48528-disable-itip-and-imip-messages-2
fix/issue-48732-exdate-rdate-property-instances
fix/issue-49756-translations
fix/issue-50054-resource-invite-regression
fix/issue-50104-system-address-book-ui-settings
fix/issue-50748-calendar-object-move
fix/issue-50748-card-object-move
fix/issue-6838-use-old-event-information-when-new-is-missing
fix/issue-8458-imip-improvements-2
fix/istorage/return-types
fix/iurlgenerator/url-regex-markdown-parenthesis
fix/jquery-ui
fix/l10n-placeholder
fix/l10n-plain-string
fix/l10n-us-english
fix/ldap-avoid-false-positive-mapping
fix/ldap/cache-ttl-jitter
fix/ldap/lower-case-emails
fix/legacy-file-drop
fix/legacy-filepicker
fix/legacy-oc-filepicker
fix/line-height-calc
fix/link-share-conflict-modal
fix/load-more-than-5-items-in-folder-filter
fix/loading-account-menu
fix/lock-session-during-cookie-renew
fix/log-failure-from-file-events
fix/log-login-flow-state-token-errors
fix/log-memcache-log-path-hash
fix/login-chain-24
fix/login-error-state
fix/login-origin
fix/loginflow
fix/lookup-server
fix/lookup-server-connector
fix/lookup-server-connector-v2
fix/low-res-for-blurhash
fix/lower-email-case
fix/lus-background-job
fix/mailer-binaryfinder-fallback
fix/make-router-reactive
fix/map-sharee-information
fix/master-template-layout
fix/middle-click
fix/migrate-dav-to-events
fix/migrate-encryption-away-from-hooks
fix/mime
fix/mime-fallback-public
fix/mime-int
fix/missing-import
fix/mkcol-quota-exceeded-response
fix/move-away-from-oc-app
fix/move-email-logic-local-user-backend
fix/move-storage-constructor-to-specific-interface
fix/multi-select
fix/mysql-removed-auth
fix/nav-quota-new-design
fix/newUser-provisioning_api
fix/no-account-filter-public-share
fix/no-issue/enforced-props-checks
fix/no-issue/file-request-disable-when-no-public-upload
fix/no-issue/link-sharing-defaults
fix/no-issue/no-reshare-perms-4-email-shares
fix/no-issue/prevent-create-delete-perms-on-file-shares
fix/no-issue/proper-share-sorting
fix/no-issue/show-file-drop-permissions-correctly
fix/no-issue/use-password-default-sharing-details
fix/no-issues/add-encryption-available-config
fix/node-vibrant
fix/noid-add-status-and-set-attendee-status
fix/noid-adjust-variables-for-translations
fix/noid-catch-listener-erros-instead-of-failing
fix/noid-check-for-properties-before-processing
fix/noid-fix-user-create-quota
fix/noid-improve-calendar-accuracy-performace
fix/noid-reset-password
fix/noid-retrieve-all-authors-at-the-same-time
fix/noid/accept-informational-tests-as-success
fix/noid/actions-boundaries
fix/noid/allows-some-char-from-federationid
fix/noid/appconfig-setmixed-on-typed
fix/noid/broken-password-reset-form
fix/noid/broken-taskprocessing-api
fix/noid/calendar-enabled
fix/noid/check-file-before-download
fix/noid/clean-config-code
fix/noid/contactsmenu-ab-enabled
fix/noid/content-header-height
fix/noid/count-disabled-correct
fix/noid/debug-objectstorage-s3
fix/noid/deleted-circles-share
fix/noid/deprecation-correct-case
fix/noid/discover-unique-ocmprovider
fix/noid/empty-path-for-files-versions
fix/noid/encrypted-propagation-test
fix/noid/ensure-userid-attr-present
fix/noid/expose-calendar-enabled
fix/noid/fed-share-on-local-reshare
fix/noid/federation-really-surely-init-token
fix/noid/fifty-fifth
fix/noid/files-page-heading-theming-name
fix/noid/files-version-sidebar-item-style
fix/noid/filter-cancelled-events
fix/noid/fix-itipbroker-messages
fix/noid/fix-try-login
fix/noid/fix-unified-search-provider-id
fix/noid/flaky-sso-tests
fix/noid/get-fedid-from-cloudfed-provider
fix/noid/get-preview-force-mimetype
fix/noid/ignore-missing-memberships-on-reshare-verification
fix/noid/ignore-missing-owner
fix/noid/ignore-null-appinfo
fix/noid/ignore-unavailable-token
fix/noid/in-folder-search
fix/noid/init-navigation-data-too-soon
fix/noid/krb-fallback
fix/noid/ldap-displayname-cached
fix/noid/ldap-n-counted-mapped-users
fix/noid/ldap-no-connection-reason
fix/noid/ldap-remnants-as-disabled-global
fix/noid/ldap-setopt-for-disabling-certcheck
fix/noid/lexicon-update-lazy-status
fix/noid/log-false-user
fix/noid/make-s3-connect-timeout-option-configurable
fix/noid/mark-searchkeys-as-internal
fix/noid/metadata-on-fresh-setup
fix/noid/no-emails-for-user-shares
fix/noid/no-lazy-loading-on-isBypassListed
fix/noid/null-safe-metadata
fix/noid/path-hash-prep-statement
fix/noid/refresh-filesize-on-conflict-24
fix/noid/remote-account-activity-translation
fix/noid/rename-remote-user-to-guest-user
fix/noid/return-verified-email
fix/noid/revert-api-breaking-return-type
fix/noid/rich-editor-mixin
fix/noid/run-kerberos-tests-on-ubuntu-latest
fix/noid/set-ext-pwd-as-sensitive
fix/noid/statetoken-concurrency
fix/noid/stuck-ffmpeg
fix/noid/task-processing-file-content-stream
fix/noid/taskprocessing-appapi
fix/noid/test-samba-with-self-hosted
fix/noid/textprocessing-list-types
fix/noid/textprocessing-schedule-taskprocessing-provider
fix/noid/thudnerbird-addon-useragent
fix/noid/transfer-ownership-select
fix/noid/try-latest-buildjet-cache
fix/noid/update-codeowners-nfebe
fix/noid/wfe-empty-group-in-check
fix/noid/wfe-set-inital-value
fix/noid/windows-font-family
fix/noid/wipe-local-storage
fix/note-icon-color
fix/null-label
fix/oauth2/owncloud-migration
fix/oauth2/retain-legacy-oc-client-support
fix/oc/inheritdoc
fix/occ/config-fileowner-suppress-errors
fix/ocm-host
fix/ocm-public-key-is-optional
fix/ocmdiscoveryservice/cache-errors
fix/only-show-reshare-if-there-is
fix/openapi/array-syntax
fix/openapi/outdated-specs
fix/oracle-db-connection
fix/oracle-db-connection-29
fix/oracle-insert-id
fix/overide-itip-broker
fix/ownership-transfer-source-user-files
fix/pass-hide-download-in-update-request
fix/password-field-sharing
fix/password-validation
fix/path-length
fix/people-translation
fix/perf/cache-avilable-taskt-types
fix/perf/cache-taskprocessing-json-parse
fix/pick-folder-smart-picker
fix/picker-tag-color
fix/preview-check
fix/product-name-capability
fix/profile-visibility
fix/pronouns-tests
fix/pronouns-translation
fix/proper-download-check
fix/proper-preview-icon
fix/properly-fail-on-invalid-json
fix/provisionApi-status-codes
fix/provisioning_api/password-change-hint-translation
fix/proxy-app-screenshot
fix/psalm/enabled-find-unused-baseline-entry
fix/psalm/throws-annotations
fix/psalm/update-baseline
fix/public-copy-move-stable-28
fix/public-displayname-owner
fix/public-get
fix/public-owner-scope
fix/public-share-expiration
fix/public-share-router
fix/public-upload-notification-default
fix/qbmapper/find-entities-return-type
fix/querybuilder/oracle-indentifier-length
fix/querybuilder/output-columns-aliases
fix/quota-exceptions
fix/quota-view-files
fix/rate-limit-share-creation
fix/read-only-share-download
fix/reasons-to-use
fix/recently_active_pgsql
fix/recommended-apps
fix/rector-use-statements
fix/redirect-openfile-param
fix/refactor-imip
fix/refactor-user-access-to-file-list
fix/refresh-convert-list
fix/release-gen-changelog
fix/reminder-node-access
fix/remove-app.php-loading
fix/remove-broken-versions-routes
fix/remove-needless-console-log
fix/remove-redundant-check-server
fix/remove-references-to-deprected-storage-interface
fix/remove-share-hint-exception-wrapping
fix/rename-trashbin
fix/reply-message
fix/request-reviews
fix/requesttoken
fix/require-update-if-mtime-is-null
fix/reset-phone-number
fix/reset-property
fix/resiliant-user-removal
fix/resolve_public_rate_limit
fix/restore-sucess
fix/retry-delete-if-locked
fix/revive-lowercase-email
fix/rich-object-strings/better-exception-messages
fix/richobjectstrings/validator-string-key-value-error
fix/rtl-regession
fix/s3-verify-peer-setting
fix/s3-versions
fix/s3/empty-sse-c-key
fix/s3configtrait/proxy-false
fix/sabre-dav-itip-broker
fix/sass
fix/scrolling-file-list
fix/search-cast
fix/search-tags-lowercase
fix/session-cron
fix/session/failed-clear-cookies
fix/session/log-ephemeral-session-close
fix/session/log-likely-lost-session-conditions
fix/session/log-regenerate-id
fix/session/log-session-id
fix/session/log-session-start-error
fix/session/permanent-token-app-password
fix/session/session-passphraze-handling
fix/session/transactional-remember-me-renewal
fix/settings--disable-discover-when-app-store-is-disabled
fix/settings-command
fix/settings-l10n
fix/settings-share-folder
fix/settings/admin/ai/textprocessing
fix/settings/email-change-restriction
fix/settings/ex-apps-search
fix/settings/mail-server-settings-form
fix/settings/read-only-apps-root
fix/settings/userid-dependency-injection
fix/setupmanager/home-root-providers-register-mounts
fix/share-allow-delete-perms-4-files
fix/share-api-create--permissions
fix/share-expiry-translation
fix/share-label
fix/share-notifications
fix/share-sidebar-bugs
fix/share-status
fix/sharing-entry-link
fix/sharing-error-catch
fix/sharing-exp-date
fix/sharing-password-submit-create
fix/sharing-restore-on-failure
fix/sharing-sidebar-tab-default
fix/shipped-app-version
fix/show-better-mtime
fix/show-deleted-team-shares
fix/show-share-recipient-in-mail
fix/show-templates-folder-default
fix/sidebar-favorites
fix/simplify-login-box
fix/size-update-appdata
fix/stable27
fix/stable28-uploader
fix/stable28/webcal-subscription-jobs-middleware
fix/stable29-header-title
fix/stable29/numerical-userid-file-item-display
fix/stable29/webcal-subscription-jobs-middleware
fix/stable29_share-api-create--permissions
fix/stable30/create-download-attribute-if-missing
fix/stable30/rename-trashbin
fix/stable30/share-types-references
fix/storage-local/get-source-path-spl-file-info
fix/storage-settings
fix/storage/get-directory-content-return-type
fix/storage/get-owner-false
fix/storage/method-docs-inheritance
fix/strict-types
fix/subadmin-user-groups
fix/tag-fileid-check
fix/tags-events
fix/tags-search-case
fix/tags/boolean-user-has-tags
fix/task-cleanup-delay
fix/task-processing-api-controller/dont-use-plus
fix/taskprocessing-api-get-file-contents
fix/taskprocessing-better-errors
fix/taskprocessing-cache
fix/taskprocessing-manager/php-notice
fix/taskprocessingcontroller-errorhandling
fix/tasktypes-translations
fix/team-resource-deduplication
fix/template-field-title
fix/template-name-overflow
fix/template-return-type
fix/template-vue3-main
fix/template/implement-itemplate
fix/tests/migrations
fix/texttotextchatwithtools-translator-notes
fix/themes-layout
fix/theming-migration
fix/theming/default-theme-selection
fix/ticket_9672007/share_mail
fix/timedjob-execution-time
fix/tp-validation
fix/twitter-fediverse
fix/two-factor-request-token
fix/type-error-filter-mount
fix/typo-recommended-apps
fix/undefined-application-key
fix/undefined-response
fix/unified-search-bar
fix/unified-search-ctrl-f
fix/unified-search-empty-sections
fix/unified-search-filter-reset-on-load-more
fix/unified-search-size
fix/unnecessary-template-fields-request
fix/update-notification
fix/update-notification-respect-config
fix/update-share-entry-quick-select
fix/updateall
fix/updatenotification-legacy-toast
fix/updatenotification/applist-error-handling
fix/upload-file-drop-info
fix/use-also-default-text
fix/use-invokeprivate-for-test
fix/user-login-with-cookie-e2ee
fix/user-manager/limit-enabled-users-counting-seen
fix/user_status/harden-api
fix/users-gid
fix/usertrait/backend-initialization
fix/validation-defaults
fix/version-channel
fix/versions/wrong-toast
fix/view-in-folder-conditions
fix/view-local-close
fix/view-only-preview
fix/view/catch-mkdir-exception-non-existent-parents
fix/wait-for-toast
fix/weather_status/search-address-offline-errors
fix/webauthn
fix/webcal-subscription-jobs-middleware
fix/webpack-nonce
fix/wrong-image-type
fixFilesRemindersJoins
fixHardcodedVersionsFolder
fixHeaderStyleSettings
fixIncParam30
fixKeyExFileExt
fixPhp83Deprecation
fixWrongTranslation
followup/39574/ocm-provider-without-beautiful-urls
followup/47329/add-all-types-to-handling
followup/48086/fix-more-activity-providers
followup/53896/adjust-interface
forbid-moving-subfolder-24
fox/noid/extended-auth-on-webdav
fullFilePreviews
fwdport/48445/master
getMountsForFileId-non-sparse
guzzleHandler
gw-codeowners-public-api
handle-missing-share-providers-when-promoting-reshares
hasTableTaskprocessingTasks
home-folder-readonly
icewind-smb-3.7
ignore-write-test-unlink-err
info-file-more-encryption-checks
info-file-permissions
info-storage-command
instance-quota
introduce-publish-classification-levels
isNumericMtime
issue-563-calendar-import-a
issue_45523_actionmenu_in_multiple_actions_menu_bar
joblist-build-error-log
jr-quota-exceeded-admin-log
jr/enh/updates/options-buttons-web-ui
jr/meta/issue-template-bugs-closed-link
jtr-auth-pw-max-length-config-sample
jtr-chore-log-getEntries-cleanup
jtr-chore-mbstring-func-overload
jtr-ci-flakey-cypress-note-test
jtr-docs-dispatcher-return
jtr-feat-setupchecks-limit-type
jtr-files-detection-refactor-finfo
jtr-fix-403-design
jtr-fix-dnspin-port-logging
jtr-fix-files-reminders-disabled
jtr-httpclient-compression
jtr-locale-personal-info
jtr-maint-refresh-part-1
jtr-perf-checks-connectivity-https-proto
jtr-profile-email-pages
jtr-refactor-auth-pubKeyTokPro
jtr-refactor-remote-php
jtr-remove-always-populate-raw-post-data
jtr-settings-memory-limit-details
jtr/chore-bug-report-logs
jtr/desc-and-help-plus-minor-fixes-files-scan
jtr/dns-noisy-dns-get-record
jtr/fix-25162
jtr/fix-40666-fallback-copy
jtr/fix-45671
jtr/fix-46609-delegation-add-group-overlap
jtr/fix-appframework-server-proto
jtr/fix-hash-hkdf-valueerror
jtr/fix-ipv6-zone-ids-link-local
jtr/fix-sharing-update-hints
jtr/fix-streamer-zip64
jtr/fix-testSearchGroups
jtr/fix-tests/mysql-phpunit-health
jtr/fix-updater-cleanup-job-logging
jtr/fix-wipe-missing-token-handling
jtr/occ-maintenance-mode-desc
jtr/preview-thumb-robustness
jtr/router-light-refactoring
jtr/setup-checks-heading
jtr/setup-checks-heading-redo
jtr/test-binaryfinder
jtr/typo-accessibility-config-sample
kerberos-saved-ticket
kerberos-saved-ticket-27
ldap-queries
leftybournes/fix/app-sorting
leftybournes/fix/files_trashbin_dont_restore_full
leftybournes/fix/files_trashbin_retention
leftybournes/fix/object_storage_large_uploads
leftybournes/fix/sftp_scan_infinite_loop
leftybournes/fix/syslog
location-provider
lockThreadsOlderThan120d
log-event-recursion
logger-app-versions
login-less-custom-bundle
man/backport/45237/stable27
master
memcache-commands
merge-token-updates
metadata-storage-id
mgallien/fix/retry_cache_operations_on_deadlock
mixedSetTTL
mount-move-checks
mountpoint-get-numeric-storage-id-cache
mountpoint-mkdir-quota
move-from-encryption-no-opt
moveOCPClasses
moveStrictTyping
multi-object-store
mysqlNativePassCi
nested-jail-root
new-julius
newfolder-race-improvements
nickv-debug-reactions-test
nickv/1214
nickv/1452
no-issue-use-correct-exceptions-in-share-class
no-shared-direct-download
noissue-refactor-share-class
normlize-less
notfound-debug-mounts
notfound-debug-mounts-30
obj-delete-not-found
obj-delete-not-found-20
object-store-filename
object-store-move-db
object-store-move-fixes
object-store-orphan
object-store-trash-move
objectstore-touch-double-cache
oc-wnd-migrate
oc-wnd-migrate-25
occ-as-root
occ-external-dependencies
occ-upgrade-reminder
occ-upgrade-wording
oci-ci-faststart
ocs-user-info-quota-optimize
optionally-hide-hidden-files-in-public-share-access
oracle-share-reminder
passedLockValueIsIntOrNull
patch-14
patch/52833
patch/61084/disable-clear-cache
patch/76955/disable-notification-on-email-change
patch/hash-return-null
patch/performance-scckit
path-available
perf/appconfig/caching
perf/avatar
perf/cache-file-reminders
perf/cache-reference-list
perf/cache-server-checks-local-cache
perf/caldav/bigger-chunks-orphan-repair
perf/capa
perf/carddav/dont-query-circles
perf/check-node-type
perf/core/jobs-index
perf/cron/delay-timedjob-checking
perf/dav-preload-search-tags
perf/db/cards-properties-abid-name-value-idx
perf/db/jobs-table-indexes
perf/excimer
perf/files/cache-garbage-collection-background-job
perf/files/chunked-upload-default-100-mib
perf/files/setup-fs-basic-auth-request
perf/filter-propfind
perf/force-sending-ifnonematch
perf/get_shares_at_once
perf/improve-incomplete-scan
perf/log-excessive-memory-consumption
perf/log-high-memory-requests
perf/noid/dont-load-addressbook-on-resolving-cloudid
perf/noid/query-performance
perf/noid/split-getSharedWith-query-into-more-performance-sets
perf/noid/unified-search-init
perf/paginate-filter-groups
perf/properies-index-
perf/realpath-custom-prop
perf/remove-filecache-index
perf/share20/get-all-shares-in-folder
perf/usermountcache/local-cache
pr/51113
prevPropPromarrayClas
primary-object-store-settings
printOccHumanFriendly
printOnlyOnceText
profile-request
pull_request-trigger
pulsejet-patch-share-attr
pulsejet/truncate-1
query-req-id-26
rakekniven-patch-1
rakekniven-patch-2
readd-object-store-phpunit
rector-phpunit10
rector-tests
refactSmallAdjust
refactor/48925/sharing-sidebar-redesign
refactor/account-management-router
refactor/app/remove-register-routes
refactor/apps/constructor-property-promotion
refactor/apps/declare-strict-types
refactor/apps/php55-features
refactor/appstore-modernization
refactor/background-service
refactor/class-string-constant
refactor/cleanup-login-logout-hooks
refactor/dav/example-contact-service
refactor/dirname-to-dir
refactor/drop-to-uploader
refactor/elvis
refactor/files-cleanup
refactor/files-deprecated-share-types
refactor/files-filelist-width
refactor/files-hotkeys
refactor/files-required-navigation
refactor/files/remove-app-class
refactor/migration-override-attribute
refactor/move-to-new-activity-exception
refactor/ocp-deprecations
refactor/preview-tests
refactor/provide-file-actions-through-composable
refactor/rector-core
refactor/rector-top-level
refactor/rector/extend-scope
refactor/register-routes
refactor/remove-app-registerRoutes
refactor/self-class-reference
refactor/settings/mail-settings-parameters
refactor/share-manager-appconfig
refactor/storage/constructors
refactor/storage/strong-param-types
refactor/storage/strong-type-properties
refactor/stream-encryption/typings
refactor/template-layout
refactor/tempmanager
refactor/use-in-instead-of-or
refactor/void-tests
refactor/zip-event
release/28.0.11
release/28.0.11_rc1
release/28.0.12
release/28.0.12_rc1
release/28.0.12_rc2
release/28.0.14
release/28.0.14_rc1
release/29.0.0beta2
release/29.0.11
release/29.0.11_rc1
release/29.0.12
release/29.0.12_rc1
release/29.0.12_rc2
release/29.0.13
release/29.0.13_rc1
release/29.0.13_rc2
release/29.0.14
release/29.0.14_rc1
release/29.0.15_rc1
release/29.0.15_rc2
release/29.0.16
release/29.0.16_rc1
release/29.0.8
release/29.0.8_rc1
release/29.0.9
release/29.0.9_rc1
release/29.0.9_rc2
release/30.0.10
release/30.0.10_rc1
release/30.0.11
release/30.0.11_rc1
release/30.0.12
release/30.0.12_rc1
release/30.0.13
release/30.0.13_rc1
release/30.0.1_rc
release/30.0.1_rc1
release/30.0.1_rc2
release/30.0.2
release/30.0.2_rc1
release/30.0.2_rc2
release/30.0.4
release/30.0.4_rc1
release/30.0.5
release/30.0.5_rc1
release/30.0.6
release/30.0.6_rc1
release/30.0.6_rc2
release/30.0.7
release/30.0.7_rc1
release/30.0.7_rc2
release/30.0.8
release/30.0.8_rc1
release/30.0.9
release/30.0.9_rc1
release/30.0.9_rc2
release/31.0.0
release/31.0.0_beta_1
release/31.0.0_beta_2
release/31.0.0_beta_4
release/31.0.0_rc2
release/31.0.0_rc3
release/31.0.0_rc4
release/31.0.0_rc5
release/31.0.1
release/31.0.1_rc1
release/31.0.1_rc2
release/31.0.2
release/31.0.2_rc1
release/31.0.3
release/31.0.3_rc1
release/31.0.3_rc2
release/31.0.4
release/31.0.4_rc1
release/31.0.5
release/31.0.5_rc1
release/31.0.6
release/31.0.6_rc1
release/31.0.7
release/31.0.7_rc1
reminder-dont-validiate-node-dav
remoteIdToShares
remove-filecache-joins
remove-locking-config-sample
remove-non-accessible-shares
remove-redundant-setting
remove-scrutinizer
remove-unused-method
removeNoisyTextEmails
removeTrailingComma
rename-deleted-default-calendar-in-trashbin
rename-hooks-webhook
repair-mimetype-expensive-squashed-29
repair-tree-invalid-parent
reshare-permission-logic-27
revert-49004
revert-49650-backport/49293/stable30
revert-49825-revert-49650-backport/49293/stable30
revert-51431-enh/noid/disable-bulk-upload
revert-52122-backport/51431/stable30
revert-52123-backport/51431/stable31
revert-52503-fix/files_sharing/filter-own-reshared-shares
revert-52914
revert-53077-backport/52914/stable31
revert-53078-backport/52914/stable30
revert-53918-revert-53141-perf/files/setup-fs-basic-auth-request
revert/41453
revert/52035
revert/52038
revert/52818
revert/email-setting-migration
revert/gfm-pin
revert/openapi-extractor
revert/share-node-accessible
revoke-admin-overwrite-8
reworkShareExceptions
rfc/global-rate-limit
rfc/request-timeout
run-test-mime-type-icon-again
s3-bucket-create-exception
s3-disable-multipart
s3-disable-multipart-remove-debug
s3-multipart-size-check
safety-net-null-check
scan-home-ext-storae
scan-locked-error
scanner-invalid-data-log
scckit-backports
security-missing-auth-error
seekable-http-size-24
settings-datadir-unused
setupChecksMoveFromBinary
sftp-fopen-write-stat-cache
sftp-known-mtime
shard-key-hint-partition
sharding-code-fixes
sharding-existing
sharding-select-fixes
share-list-cmd
share-list-set-owner
share-mount-check-no-in
share-move-storage-error
share-reminder-sharding
share-root-meta-cache
shared-cache-watcher-update
shared-cache-watcher-update-30
shared-target-verify-cache
shared-target-verify-cache-fix
skjnldbot/nextcloud-upload
skjnldsbot/dep-upload-stable29
skjnldsbot/dep-upload-stable30
skjnldsbot/dep-upload-stable31
skjnldsv-patch-1
smb-acl-fail-soft
smb-hasupdated-deleted
smb-notify-test
smb-open-failure-log
smb-systembridge
solracsf-patch-1
stable-swift-v3
stable10
stable11
stable12
stable13
stable14
stable15
stable16
stable17
stable18
stable19
stable20
stable21
stable22
stable23
stable24
stable25
stable26
stable27
stable28
stable28BackportMissingSetTTL
stable29
stable30
stable30-admin-audit-listen-failed-login
stable30-fix-renaming-a-received-share-by-a-user-with-stale-shares
stable31
stable9
storage-cache-not-exists
storage-debug-info
storage-id-cache-memcache
stream-assembly-stream-size
sub-mount-filter-no-storage
tag-color-query
targetIsNotShared-catch-notfound
techdebt/noid/add-parameter-typehints
techdebt/noid/more-phpunit-10-preparations
techdebt/noid/more-useful-debug-logs
techdebt/noid/prepare-phpunit10
techdebt/noid/use-new-attributes-to-declare-since
techdebt/standard-15/consumable-ocp
test-scanner-no-transactions-26
test/autotest-git
test/cypress-flaky
test/cypress-flakyness
test/eol-check
test/eol-check-26
test/files-download
test/files-sharing-phpunit
test/fix-cypress
test/fix-files-sharing
test/folder-tree
test/integration/cleanup-logs
test/no-git-ignore
test/noid/debug-reactions-test
test/noid/improve-test-output
test/noid/more-phpunit-10
test/widget-perf
test/workflow
tests/fix-jest-leftover
tests/noid/caldav-tests
tests/noid/carddav-tests
tests/noid/dav-systemtag
tests/noid/debug-systemkeeper
tests/noid/federated-file-sharing
tests/noid/files_sharing-1
tests/noid/finish-dav
tests/noid/ldap
tests/noid/migrate-federation-and-files_trashbin
tests/noid/migrate-files-external-to-phpunit10
tests/noid/migrate-files_versions
tests/noid/migrate-more-apps-to-phpunit10
tests/noid/more-phpunit10-apps
tests/noid/speed-up-comments-test
tests/template-workflow
transfer-external-storage
transfer-share-skip-notfound
translatable-string
trasbin-event-fixes
trimBucketDnsName
try-non-recursive-source-27
update-phpdoc-for-folder-get
update-size-byte
update-stale-bot-configuration
updateLastSeen
updater-change-mimetype-objectstore
upgrade/psr-log-to-v2
uploadfolder-rework
uploadfolder-rework-autofix
upstream/52135/52135-master
useHttpFramework
useNameNotUrl
useOCPClassesTrashbin
usermountcache-filecache-joins
usermountcache-logging
validateProvidedEmail
version-test-new-file
wrapper-instanceof-resiliant-squash
zip-download-no-sabre-response
zorn-v-patch-1
Nextcloud server, a safe home for all your data: https://github.com/nextcloud/server www-data
blob: 1b2016aabb97afb97610e2961822d1e71dd2e7f4 (
plain )