]> source.dussan.org Git - jgit.git/commitdiff
Fetch submodule repo before resolving commits 07/100307/5
authorMichael FIG <michael@fig.org>
Wed, 28 Jun 2017 21:33:07 +0000 (15:33 -0600)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 20 Sep 2017 19:49:46 +0000 (21:49 +0200)
By default, this is turned off unless cmd.setFetch(true) is given.  It
will default to true in a future release to mimic c-git behaviour.

This is needed to prevent Eclipse from crashing with "Missing unknown
[REF]" when cloning a repo with submodules.

Bug: 470318
Change-Id: I8ae37c7c5bd2408cead8d57dd13e93e01e0e9dc1
Signed-off-by: Michael FIG <michael@fig.org>
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java

index 4d3dff02cda61a058e8a1c80d88fa9519b00d553..c0aeb83d494ddc0ef4a80c09f6f02ee9a7225039 100644 (file)
@@ -91,6 +91,8 @@ public class SubmoduleUpdateCommand extends
 
        private CloneCommand.Callback callback;
 
+       private boolean fetch = false;
+
        /**
         * @param repo
         */
@@ -113,6 +115,19 @@ public class SubmoduleUpdateCommand extends
                return this;
        }
 
+       /**
+        * Whether to fetch the submodules before we update them. By default, this
+        * is set to <code>false</code>
+        *
+        * @param fetch
+        * @return this command
+        * @since 4.9
+        */
+       public SubmoduleUpdateCommand setFetch(final boolean fetch) {
+               this.fetch = fetch;
+               return this;
+       }
+
        /**
         * Add repository-relative submodule path to initialize
         *
@@ -161,7 +176,7 @@ public class SubmoduleUpdateCommand extends
                                        continue;
 
                                Repository submoduleRepo = generator.getRepository();
-                               // Clone repository is not present
+                               // Clone repository if not present
                                if (submoduleRepo == null) {
                                        if (callback != null) {
                                                callback.cloningSubmodule(generator.getPath());
@@ -175,6 +190,18 @@ public class SubmoduleUpdateCommand extends
                                        if (monitor != null)
                                                clone.setProgressMonitor(monitor);
                                        submoduleRepo = clone.call().getRepository();
+                               } else if (this.fetch) {
+                                       if (callback != null) {
+                                               // FIXME: Do we need a new callback to tell them we're
+                                               // fetching?
+                                               callback.cloningSubmodule(generator.getPath());
+                                       }
+                                       FetchCommand fetchCommand = Git.wrap(submoduleRepo).fetch();
+                                       if (monitor != null) {
+                                               fetchCommand.setProgressMonitor(monitor);
+                                       }
+                                       configure(fetchCommand);
+                                       fetchCommand.call();
                                }
 
                                try (RevWalk walk = new RevWalk(submoduleRepo)) {