@ -44,9 +44,10 @@
package org.eclipse.jgit.transport ;
package org.eclipse.jgit.transport ;
import java.io.IOException ;
import java.io.IOException ;
import java.util.Collection ;
import java.util.LinkedHashSet ;
import java.util.LinkedHashSet ;
import java.util.Map ;
import java.util.Set ;
import java.util.Set ;
import java.util.SortedMap ;
import org.eclipse.jgit.lib.AlternateRepositoryDatabase ;
import org.eclipse.jgit.lib.AlternateRepositoryDatabase ;
import org.eclipse.jgit.lib.AnyObjectId ;
import org.eclipse.jgit.lib.AnyObjectId ;
@ -59,6 +60,7 @@ import org.eclipse.jgit.revwalk.RevFlag;
import org.eclipse.jgit.revwalk.RevObject ;
import org.eclipse.jgit.revwalk.RevObject ;
import org.eclipse.jgit.revwalk.RevTag ;
import org.eclipse.jgit.revwalk.RevTag ;
import org.eclipse.jgit.revwalk.RevWalk ;
import org.eclipse.jgit.revwalk.RevWalk ;
import org.eclipse.jgit.util.RefMap ;
/** Support for the start of {@link UploadPack} and {@link ReceivePack}. */
/** Support for the start of {@link UploadPack} and {@link ReceivePack}. */
public abstract class RefAdvertiser {
public abstract class RefAdvertiser {
@ -122,7 +124,7 @@ public abstract class RefAdvertiser {
* < p >
* < p >
* This method must be invoked prior to any of the following :
* This method must be invoked prior to any of the following :
* < ul >
* < ul >
* < li > { @link # send ( Collection ) }
* < li > { @link # send ( Map ) }
* < li > { @link # advertiseHave ( AnyObjectId ) }
* < li > { @link # advertiseHave ( AnyObjectId ) }
* < li > { @link # includeAdditionalHaves ( ) }
* < li > { @link # includeAdditionalHaves ( ) }
* < / ul >
* < / ul >
@ -140,7 +142,7 @@ public abstract class RefAdvertiser {
* < p >
* < p >
* This method must be invoked prior to any of the following :
* This method must be invoked prior to any of the following :
* < ul >
* < ul >
* < li > { @link # send ( Collection ) }
* < li > { @link # send ( Map ) }
* < li > { @link # advertiseHave ( AnyObjectId ) }
* < li > { @link # advertiseHave ( AnyObjectId ) }
* < li > { @link # includeAdditionalHaves ( ) }
* < li > { @link # includeAdditionalHaves ( ) }
* < / ul >
* < / ul >
@ -160,14 +162,14 @@ public abstract class RefAdvertiser {
*
*
* @param refs
* @param refs
* zero or more refs to format for the client . The collection is
* zero or more refs to format for the client . The collection is
* copied and sorted before display and therefore may appear in
* sorted before display if necessary , and therefore may appear
* any order .
* in any order .
* @throws IOException
* @throws IOException
* the underlying output stream failed to write out an
* the underlying output stream failed to write out an
* advertisement record .
* advertisement record .
* /
* /
public void send ( final Collection < Ref > refs ) throws IOException {
public void send ( final Map < String , Ref > refs ) throws IOException {
for ( final Ref r : RefComparator . sort ( refs ) ) {
for ( final Ref r : getSortedRefs ( refs ) ) {
final RevObject obj = parseAnyOrNull ( r . getObjectId ( ) ) ;
final RevObject obj = parseAnyOrNull ( r . getObjectId ( ) ) ;
if ( obj ! = null ) {
if ( obj ! = null ) {
advertiseAny ( obj , r . getName ( ) ) ;
advertiseAny ( obj , r . getName ( ) ) ;
@ -177,6 +179,13 @@ public abstract class RefAdvertiser {
}
}
}
}
private Iterable < Ref > getSortedRefs ( Map < String , Ref > all ) {
if ( all instanceof RefMap
| | ( all instanceof SortedMap & & ( ( SortedMap ) all ) . comparator ( ) = = null ) )
return all . values ( ) ;
return RefComparator . sort ( all . values ( ) ) ;
}
/ * *
/ * *
* Advertise one object is available using the magic { @code . have } .
* Advertise one object is available using the magic { @code . have } .
* < p >
* < p >