diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java b/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java index ae0e73766e..be587dba73 100644 --- a/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java +++ b/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java @@ -1603,18 +1603,30 @@ public void submoduleReset(boolean recursive, boolean hard) throws GitException, * Cleans submodules */ @Override - public void submoduleClean(boolean recursive) throws GitException, InterruptedException { + public void submoduleClean(boolean recursive, boolean cleanSubmodule) throws GitException, InterruptedException { submoduleReset(true, true); ArgumentListBuilder args = new ArgumentListBuilder(); args.add("submodule", "foreach"); if (recursive) { args.add("--recursive"); } - args.add("git clean -fdx"); + String cmd = "git clean -fdx"; + if (cleanSubmodule) cmd = "git clean -ffdx"; + args.add(cmd); launchCommand(args); } + /** + * {@inheritDoc} + * + * Cleans submodules + */ + @Override + public void submoduleClean(boolean recursive) throws GitException, InterruptedException { + this.submoduleClean(recursive, false); + } + /** * {@inheritDoc} * diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java b/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java index bc8fd0638f..f9ee5a2bd6 100644 --- a/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java +++ b/src/main/java/org/jenkinsci/plugins/gitclient/GitClient.java @@ -806,6 +806,16 @@ void submoduleUpdate(boolean recursive, boolean remoteTracking, String reference */ void submoduleClean(boolean recursive) throws GitException, InterruptedException; + /** + * submoduleClean. + * + * @param recursive a boolean. + * @param cleanSubmodule flag to add extra -f + * @throws hudson.plugins.git.GitException if underlying git operation fails. + * @throws java.lang.InterruptedException if interrupted. + */ + void submoduleClean(boolean recursive, boolean cleanSubmodule) throws GitException, InterruptedException; + /** * submoduleInit. * diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/JGitAPIImpl.java b/src/main/java/org/jenkinsci/plugins/gitclient/JGitAPIImpl.java index a032ff42bd..0b6d899e1b 100644 --- a/src/main/java/org/jenkinsci/plugins/gitclient/JGitAPIImpl.java +++ b/src/main/java/org/jenkinsci/plugins/gitclient/JGitAPIImpl.java @@ -2324,12 +2324,12 @@ private Iterable submodules() throws IOException { /** {@inheritDoc} */ @Override - public void submoduleClean(boolean recursive) throws GitException { + public void submoduleClean(boolean recursive, boolean cleanSubmodule) throws GitException { try { for (JGitAPIImpl sub : submodules()) { - sub.clean(); + sub.clean(cleanSubmodule); if (recursive) { - sub.submoduleClean(true); + sub.submoduleClean(true, cleanSubmodule); } } } catch (IOException e) { @@ -2337,6 +2337,12 @@ public void submoduleClean(boolean recursive) throws GitException { } } + /** {@inheritDoc} */ + @Override + public void submoduleClean(boolean recursive) throws GitException { + this.submoduleClean(recursive, false); + } + /** * Update submodules. * diff --git a/src/main/java/org/jenkinsci/plugins/gitclient/RemoteGitImpl.java b/src/main/java/org/jenkinsci/plugins/gitclient/RemoteGitImpl.java index 6b0b65fccf..d8be5c6ef1 100644 --- a/src/main/java/org/jenkinsci/plugins/gitclient/RemoteGitImpl.java +++ b/src/main/java/org/jenkinsci/plugins/gitclient/RemoteGitImpl.java @@ -783,7 +783,11 @@ public void submoduleClean(boolean recursive) throws GitException, InterruptedEx } /** {@inheritDoc} */ - @Override + public void submoduleClean(boolean recursive, boolean cleanSubmodule) throws GitException, InterruptedException { + proxy.submoduleClean(recursive, cleanSubmodule); + } + + /** {@inheritDoc} */ public void setupSubmoduleUrls(Revision rev, TaskListener listener) throws GitException, InterruptedException { proxy.setupSubmoduleUrls(rev, listener); }