Class SubmoduleWalk

  • All Implemented Interfaces:
    java.lang.AutoCloseable

    public class SubmoduleWalk
    extends java.lang.Object
    implements java.lang.AutoCloseable
    Walker that visits all submodule entries found in a tree
    • Constructor Detail

      • SubmoduleWalk

        public SubmoduleWalk​(Repository repository)
                      throws java.io.IOException
        Create submodule generator
        Parameters:
        repository - the Repository.
        Throws:
        java.io.IOException
    • Method Detail

      • forIndex

        public static SubmoduleWalk forIndex​(Repository repository)
                                      throws java.io.IOException
        Create a generator to walk over the submodule entries currently in the index The .gitmodules file is read from the index.
        Parameters:
        repository - a Repository object.
        Returns:
        generator over submodule index entries. The caller is responsible for calling close().
        Throws:
        java.io.IOException
      • forPath

        public static SubmoduleWalk forPath​(Repository repository,
                                            AnyObjectId treeId,
                                            java.lang.String path)
                                     throws java.io.IOException
        Create a generator and advance it to the submodule entry at the given path
        Parameters:
        repository - a Repository object.
        treeId - the root of a tree containing both a submodule at the given path and .gitmodules at the root.
        path - a String object.
        Returns:
        generator at given path. The caller is responsible for calling close(). Null if no submodule at given path.
        Throws:
        java.io.IOException
      • forPath

        public static SubmoduleWalk forPath​(Repository repository,
                                            AbstractTreeIterator iterator,
                                            java.lang.String path)
                                     throws java.io.IOException
        Create a generator and advance it to the submodule entry at the given path
        Parameters:
        repository - a Repository object.
        iterator - the root of a tree containing both a submodule at the given path and .gitmodules at the root.
        path - a String object.
        Returns:
        generator at given path. The caller is responsible for calling close(). Null if no submodule at given path.
        Throws:
        java.io.IOException
      • getSubmoduleDirectory

        public static java.io.File getSubmoduleDirectory​(Repository parent,
                                                         java.lang.String path)
        Get submodule directory
        Parameters:
        parent - the Repository.
        path - submodule path
        Returns:
        directory
      • getSubmoduleRepository

        public static Repository getSubmoduleRepository​(Repository parent,
                                                        java.lang.String path)
                                                 throws java.io.IOException
        Get submodule repository
        Parameters:
        parent - the Repository.
        path - submodule path
        Returns:
        repository or null if repository doesn't exist
        Throws:
        java.io.IOException
      • getSubmoduleRepository

        public static Repository getSubmoduleRepository​(java.io.File parent,
                                                        java.lang.String path)
                                                 throws java.io.IOException
        Get submodule repository at path
        Parameters:
        parent - the parent
        path - submodule path
        Returns:
        repository or null if repository doesn't exist
        Throws:
        java.io.IOException
      • getSubmoduleRepository

        public static Repository getSubmoduleRepository​(java.io.File parent,
                                                        java.lang.String path,
                                                        FS fs)
                                                 throws java.io.IOException
        Get submodule repository at path, using the specified file system abstraction
        Parameters:
        parent -
        path -
        fs - the file system abstraction to be used
        Returns:
        repository or null if repository doesn't exist
        Throws:
        java.io.IOException
        Since:
        4.10
      • getSubmoduleRepository

        public static Repository getSubmoduleRepository​(java.io.File parent,
                                                        java.lang.String path,
                                                        FS fs,
                                                        BaseRepositoryBuilder<?,​? extends Repository> builder)
                                                 throws java.io.IOException
        Get submodule repository at path, using the specified file system abstraction and the specified builder
        Parameters:
        parent - Repository that contains the submodule
        path - of the working tree of the submodule
        fs - FS to use
        builder - BaseRepositoryBuilder to use to build the submodule repository
        Returns:
        the Repository of the submodule, or null if it doesn't exist
        Throws:
        java.io.IOException - on errors
        Since:
        5.6
      • getSubmoduleRemoteUrl

        public static java.lang.String getSubmoduleRemoteUrl​(Repository parent,
                                                             java.lang.String url)
                                                      throws java.io.IOException
        Resolve submodule repository URL.

        This handles relative URLs that are typically specified in the '.gitmodules' file by resolving them against the remote URL of the parent repository.

        Relative URLs will be resolved against the parent repository's working directory if the parent repository has no configured remote URL.

        Parameters:
        parent - parent repository
        url - absolute or relative URL of the submodule repository
        Returns:
        resolved URL
        Throws:
        java.io.IOException
      • setModulesConfig

        public SubmoduleWalk setModulesConfig​(Config config)
        Set the config used by this walk. This method need only be called if constructing a walk manually instead of with one of the static factory methods above.
        Parameters:
        config - .gitmodules config object
        Returns:
        this generator
      • setRootTree

        public SubmoduleWalk setRootTree​(AbstractTreeIterator tree)
        Set the tree used by this walk for finding .gitmodules.

        The root tree is not read until the first submodule is encountered by the walk.

        This method need only be called if constructing a walk manually instead of with one of the static factory methods above.

        Parameters:
        tree - tree containing .gitmodules
        Returns:
        this generator
      • setRootTree

        public SubmoduleWalk setRootTree​(AnyObjectId id)
                                  throws java.io.IOException
        Set the tree used by this walk for finding .gitmodules.

        The root tree is not read until the first submodule is encountered by the walk.

        This method need only be called if constructing a walk manually instead of with one of the static factory methods above.

        Parameters:
        id - ID of a tree containing .gitmodules
        Returns:
        this generator
        Throws:
        java.io.IOException
      • loadModulesConfig

        public SubmoduleWalk loadModulesConfig()
                                        throws java.io.IOException,
                                               ConfigInvalidException
        Load the config for this walk from .gitmodules.

        Uses the root tree if setRootTree(AbstractTreeIterator) was previously called, otherwise uses the working tree.

        If no submodule config is found, loads an empty config.

        Returns:
        this generator
        Throws:
        java.io.IOException - if an error occurred, or if the repository is bare
        ConfigInvalidException
      • loadPathNames

        private void loadPathNames()
      • containsGitModulesFile

        public static boolean containsGitModulesFile​(Repository repository)
                                              throws java.io.IOException
        Checks whether the working tree contains a .gitmodules file. That's a hint that the repo contains submodules.
        Parameters:
        repository - the repository to check
        Returns:
        true if the working tree contains a .gitmodules file, false otherwise. Always returns false for bare repositories.
        Throws:
        java.io.IOException
        CorruptObjectException - if any.
        Since:
        3.6
      • getModuleName

        private java.lang.String getModuleName​(java.lang.String modulePath)
      • reset

        public SubmoduleWalk reset()
        Reset generator and start new submodule walk
        Returns:
        this generator
      • getDirectory

        public java.io.File getDirectory()
        Get directory that will be the root of the submodule's local repository
        Returns:
        submodule repository directory
      • next

        public boolean next()
                     throws java.io.IOException
        Advance to next submodule in the index tree. The object id and path of the next entry can be obtained by calling getObjectId() and getPath().
        Returns:
        true if entry found, false otherwise
        Throws:
        java.io.IOException
      • getPath

        public java.lang.String getPath()
        Get path of current submodule entry
        Returns:
        path
      • getModuleName

        public java.lang.String getModuleName()
                                       throws java.io.IOException,
                                              ConfigInvalidException
        The module name for the current submodule entry (used for the section name of .git/config)
        Returns:
        name
        Throws:
        ConfigInvalidException
        java.io.IOException
        Since:
        4.10
      • getObjectId

        public ObjectId getObjectId()
        Get object id of current submodule entry
        Returns:
        object id
      • getModulesPath

        public java.lang.String getModulesPath()
                                        throws java.io.IOException,
                                               ConfigInvalidException
        Get the configured path for current entry. This will be the value from the .gitmodules file in the current repository's working tree.
        Returns:
        configured path
        Throws:
        ConfigInvalidException
        java.io.IOException
      • getConfigUrl

        public java.lang.String getConfigUrl()
                                      throws java.io.IOException,
                                             ConfigInvalidException
        Get the configured remote URL for current entry. This will be the value from the repository's config.
        Returns:
        configured URL
        Throws:
        ConfigInvalidException
        java.io.IOException
      • getModulesUrl

        public java.lang.String getModulesUrl()
                                       throws java.io.IOException,
                                              ConfigInvalidException
        Get the configured remote URL for current entry. This will be the value from the .gitmodules file in the current repository's working tree.
        Returns:
        configured URL
        Throws:
        ConfigInvalidException
        java.io.IOException
      • getConfigUpdate

        public java.lang.String getConfigUpdate()
                                         throws java.io.IOException,
                                                ConfigInvalidException
        Get the configured update field for current entry. This will be the value from the repository's config.
        Returns:
        update value
        Throws:
        ConfigInvalidException
        java.io.IOException
      • getModulesUpdate

        public java.lang.String getModulesUpdate()
                                          throws java.io.IOException,
                                                 ConfigInvalidException
        Get the configured update field for current entry. This will be the value from the .gitmodules file in the current repository's working tree.
        Returns:
        update value
        Throws:
        ConfigInvalidException
        java.io.IOException
      • getRepository

        public Repository getRepository()
                                 throws java.io.IOException
        Get repository for current submodule entry
        Returns:
        repository or null if non-existent
        Throws:
        java.io.IOException
      • getHead

        public ObjectId getHead()
                         throws java.io.IOException
        Get commit id that HEAD points to in the current submodule's repository
        Returns:
        object id of HEAD reference
        Throws:
        java.io.IOException
      • getHeadRef

        public java.lang.String getHeadRef()
                                    throws java.io.IOException
        Get ref that HEAD points to in the current submodule's repository
        Returns:
        ref name, null on failures
        Throws:
        java.io.IOException
      • getRemoteUrl

        public java.lang.String getRemoteUrl()
                                      throws java.io.IOException,
                                             ConfigInvalidException
        Get the resolved remote URL for the current submodule.

        This method resolves the value of getModulesUrl() to an absolute URL

        Returns:
        resolved remote URL
        Throws:
        java.io.IOException
        ConfigInvalidException
      • close

        public void close()

        Release any resources used by this walker's reader.

        Specified by:
        close in interface java.lang.AutoCloseable
        Since:
        4.0