@ -54,6 +54,7 @@ import java.util.ArrayList;
import java.util.List ;
import java.util.Map ;
import org.eclipse.jgit.annotations.Nullable ;
import org.eclipse.jgit.api.Git ;
import org.eclipse.jgit.api.GitCommand ;
import org.eclipse.jgit.api.SubmoduleAddCommand ;
@ -103,7 +104,6 @@ import org.eclipse.jgit.util.FileUtils;
* @since 3 . 4
* /
public class RepoCommand extends GitCommand < RevCommit > {
private String path ;
private String uri ;
private String groups ;
@ -114,6 +114,7 @@ public class RepoCommand extends GitCommand<RevCommit> {
private RemoteReader callback ;
private InputStream inputStream ;
private IncludedFileReader includedReader ;
private boolean ignoreRemoteFailures = false ;
private List < RepoProject > bareProjects ;
private Git git ;
@ -137,9 +138,11 @@ public class RepoCommand extends GitCommand<RevCommit> {
* The URI of the remote repository
* @param ref
* The ref ( branch / tag / etc . ) to read
* @return the sha1 of the remote repository
* @return the sha1 of the remote repository , or null if the ref does
* not exist .
* @throws GitAPIException
* /
@Nullable
public ObjectId sha1 ( String uri , String ref ) throws GitAPIException ;
/ * *
@ -318,7 +321,7 @@ public class RepoCommand extends GitCommand<RevCommit> {
}
/ * *
* Set whether the branch name should be recorded in . gitmodules
* Set whether the branch name should be recorded in . gitmodules .
* < p >
* Submodule entries in . gitmodules can include a "branch" field
* to indicate what remote branch each submodule tracks .
@ -354,6 +357,26 @@ public class RepoCommand extends GitCommand<RevCommit> {
return this ;
}
/ * *
* Set whether to skip projects whose commits don ' t exist remotely .
* < p >
* When set to true , we ' ll just skip the manifest entry and continue
* on to the next one .
* < p >
* When set to false ( default ) , we ' ll throw an error when remote
* failures occur .
* < p >
* Not implemented for non - bare repositories .
*
* @param ignore Whether to ignore the remote failures .
* @return this command
* @since 4 . 3
* /
public RepoCommand setIgnoreRemoteFailures ( boolean ignore ) {
this . ignoreRemoteFailures = ignore ;
return this ;
}
/ * *
* Set the author / committer for the bare repository commit .
* < p >
@ -452,22 +475,29 @@ public class RepoCommand extends GitCommand<RevCommit> {
for ( RepoProject proj : bareProjects ) {
String name = proj . getPath ( ) ;
String nameUri = proj . getName ( ) ;
cfg . setString ( "submodule" , name , "path" , name ) ; //$NON-NLS-1$ //$NON-NLS-2$
cfg . setString ( "submodule" , name , "url" , nameUri ) ; //$NON-NLS-1$ //$NON-NLS-2$
// create gitlink
DirCacheEntry dcEntry = new DirCacheEntry ( name ) ;
ObjectId objectId ;
if ( ObjectId . isId ( proj . getRevision ( ) ) ) {
if ( ObjectId . isId ( proj . getRevision ( ) )
& & ! ignoreRemoteFailures ) {
objectId = ObjectId . fromString ( proj . getRevision ( ) ) ;
} else {
objectId = callback . sha1 ( nameUri , proj . getRevision ( ) ) ;
if ( recordRemoteBranch )
if ( objectId = = null ) {
if ( ignoreRemoteFailures ) {
continue ;
}
throw new RemoteUnavailableException ( nameUri ) ;
}
if ( recordRemoteBranch ) {
// can be branch or tag
cfg . setString ( "submodule" , name , "branch" , //$NON-NLS-1$ //$NON-NLS-2$
proj . getRevision ( ) ) ;
}
}
if ( objectId = = null )
throw new RemoteUnavailableException ( nameUri ) ;
cfg . setString ( "submodule" , name , "path" , name ) ; //$NON-NLS-1$ //$NON-NLS-2$
cfg . setString ( "submodule" , name , "url" , nameUri ) ; //$NON-NLS-1$ //$NON-NLS-2$
// create gitlink
DirCacheEntry dcEntry = new DirCacheEntry ( name ) ;
dcEntry . setObjectId ( objectId ) ;
dcEntry . setFileMode ( FileMode . GITLINK ) ;
builder . add ( dcEntry ) ;