Transport: load all refs only if push refspecs have wildcards

There is no need to load all refs if there are no wildcard push
refspecs. Load them lazily on the first wildcard refspec encountered
instead of loading them up-front.

Change-Id: I6d0e981f9ed4997dbdefeb7f83f37ff4f33e06a5
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
This commit is contained in:
Thomas Wolf 2022-02-11 17:18:20 +01:00 committed by Matthias Sohn
parent 855a734875
commit 63c1c6e4d8
1 changed files with 7 additions and 3 deletions

View File

@ -2,7 +2,7 @@
* Copyright (C) 2008, 2009 Google Inc.
* Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2008, 2020 Shawn O. Pearce <spearce@spearce.org> and others
* Copyright (C) 2008, 2022 Shawn O. Pearce <spearce@spearce.org> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
@ -656,14 +656,18 @@ public static Collection<RemoteRefUpdate> findRemoteRefUpdatesFor(
private static Collection<RefSpec> expandPushWildcardsFor(
final Repository db, final Collection<RefSpec> specs)
throws IOException {
final List<Ref> localRefs = db.getRefDatabase().getRefs();
final Collection<RefSpec> procRefs = new LinkedHashSet<>();
List<Ref> localRefs = null;
for (RefSpec spec : specs) {
if (spec.isWildcard()) {
if (localRefs == null) {
localRefs = db.getRefDatabase().getRefs();
}
for (Ref localRef : localRefs) {
if (spec.matchSource(localRef))
if (spec.matchSource(localRef)) {
procRefs.add(spec.expandFromSource(localRef));
}
}
} else {
procRefs.add(spec);