This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 431dbd07909b camel-git - Add depth option to provide shallow clone
431dbd07909b is described below
commit 431dbd07909b1c2149f00febd85c3218cf38ea69
Author: Croway <[email protected]>
AuthorDate: Mon Feb 23 15:28:15 2026 +0100
camel-git - Add depth option to provide shallow clone
---
.../org/apache/camel/catalog/components/git.json | 47 +++---
.../camel/component/git/GitEndpointConfigurer.java | 3 +
.../camel/component/git/GitEndpointUriFactory.java | 3 +-
.../org/apache/camel/component/git/git.json | 47 +++---
.../camel-git/src/main/docs/git-component.adoc | 12 ++
.../apache/camel/component/git/GitEndpoint.java | 30 ++--
.../camel/component/git/RepositoryFactory.java | 11 +-
.../camel/component/git/producer/GitProducer.java | 51 +++---
.../git/consumer/GitConsumerCommitTest.java | 2 +-
.../component/git/consumer/GitConsumerTest.java | 10 +-
.../component/git/producer/GitProducerTest.java | 177 +++++++++++----------
.../endpoint/dsl/GitEndpointBuilderFactory.java | 30 ++++
12 files changed, 243 insertions(+), 180 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
index f648b7ca2ec4..fc475b1d1f74 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
@@ -55,28 +55,29 @@
"exchangePattern": { "index": 6, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
"pollStrategy": { "index": 7, "kind": "parameter", "displayName": "Poll
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced",
"required": false, "type": "object", "javaType":
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false,
"autowired": false, "secret": false, "description": "A pluggable
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your
custom implementation to control error handling usually occurred during the pol
[...]
"allowEmpty": { "index": 8, "kind": "parameter", "displayName": "Allow
Empty", "group": "producer", "label": "producer", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": true, "description": "The
flag to manage empty git commits" },
- "operation": { "index": 9, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick",
"clean", "clone", "commit", "commitAll", "createBranch", "createTag",
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd",
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated":
false, "autowired": false, "secret": false, " [...]
- "remoteName": { "index": 10, "kind": "parameter", "displayName": "Remote
Name", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository name to use in
particular operation like pull" },
- "remotePath": { "index": 11, "kind": "parameter", "displayName": "Remote
Path", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository path" },
- "tagName": { "index": 12, "kind": "parameter", "displayName": "Tag Name",
"group": "producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "The tag name to work on" },
- "targetBranchName": { "index": 13, "kind": "parameter", "displayName":
"Target Branch Name", "group": "producer", "label": "producer", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "master", "description":
"Name of target branch in merge operation. If not supplied will try to use
init.defaultBranch git configs. If not configured will use default value" },
- "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
- "gitConfigFile": { "index": 15, "kind": "parameter", "displayName": "Git
Config File", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "A String with path to a
.gitconfig file" },
- "backoffErrorThreshold": { "index": 16, "kind": "parameter",
"displayName": "Backoff Error Threshold", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int",
"deprecated": false, "autowired": false, "secret": false, "description": "The
number of subsequent error polls (failed due some error) that should happen
before the backoffMultipler should kick-in." },
- "backoffIdleThreshold": { "index": 17, "kind": "parameter", "displayName":
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "The number of subsequent
idle polls that should happen before the backoffMultipler should kick-in." },
- "backoffMultiplier": { "index": 18, "kind": "parameter", "displayName":
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "To let the scheduled
polling consumer backoff if there has been a number of subsequent idles\/errors
in a row. The multiplier is then the number of polls that will be skipped
before the next actual attempt is h [...]
- "delay": { "index": 19, "kind": "parameter", "displayName": "Delay",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 500, "description": "Milliseconds before the
next poll." },
- "greedy": { "index": 20, "kind": "parameter", "displayName": "Greedy",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If greedy is enabled,
then the ScheduledPollConsumer will run immediately again, if the previous run
polled 1 or more messages." },
- "initialDelay": { "index": 21, "kind": "parameter", "displayName":
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "long", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": 1000, "description":
"Milliseconds before the first poll starts." },
- "repeatCount": { "index": 22, "kind": "parameter", "displayName": "Repeat
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit
of number of fires. So if you set it to 1, the scheduler will only fire once.
If you set it to 5, it will only fire five times. A value of zero or negative
means fire forever." },
- "runLoggingLevel": { "index": 23, "kind": "parameter", "displayName": "Run
Logging Level", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel",
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated":
false, "autowired": false, "secret": false, "defaultValue": "TRACE",
"description": "The consumer logs a start\/complete log line when it polls.
This option allows you to configure the log [...]
- "scheduledExecutorService": { "index": 24, "kind": "parameter",
"displayName": "Scheduled Executor Service", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "object", "javaType":
"java.util.concurrent.ScheduledExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Allows for configuring a
custom\/shared thread pool to use for the consumer. By default each consumer
has its own single threaded thread pool." },
- "scheduler": { "index": 25, "kind": "parameter", "displayName":
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "none", "description": "To
use a cron scheduler from either camel-spring or camel-quartz component. Use
value spring or quartz for built in scheduler" },
- "schedulerProperties": { "index": 26, "kind": "parameter", "displayName":
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.",
"multiValue": true, "deprecated": false, "autowired": false, "secret": false,
"description": "To configure additional properties when using a custom
scheduler or any of the Quartz, Spring based scheduler. This i [...]
- "startScheduler": { "index": 27, "kind": "parameter", "displayName":
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"description": "Whether the scheduler should be auto started." },
- "timeUnit": { "index": 28, "kind": "parameter", "displayName": "Time
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS",
"DAYS" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and
delay options." },
- "useFixedDelay": { "index": 29, "kind": "parameter", "displayName": "Use
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in
JDK for details." },
- "password": { "index": 30, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository password" },
- "username": { "index": 31, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository username" }
+ "depth": { "index": 9, "kind": "parameter", "displayName": "Depth",
"group": "producer", "label": "producer", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"description": "Clone depth for shallow clones. A value of 1 fetches only the
latest commit. When set to 0 or not specified, a full clone is performed." },
+ "operation": { "index": 10, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick",
"clean", "clone", "commit", "commitAll", "createBranch", "createTag",
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd",
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated":
false, "autowired": false, "secret": false, [...]
+ "remoteName": { "index": 11, "kind": "parameter", "displayName": "Remote
Name", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository name to use in
particular operation like pull" },
+ "remotePath": { "index": 12, "kind": "parameter", "displayName": "Remote
Path", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository path" },
+ "tagName": { "index": 13, "kind": "parameter", "displayName": "Tag Name",
"group": "producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "The tag name to work on" },
+ "targetBranchName": { "index": 14, "kind": "parameter", "displayName":
"Target Branch Name", "group": "producer", "label": "producer", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "master", "description":
"Name of target branch in merge operation. If not supplied will try to use
init.defaultBranch git configs. If not configured will use default value" },
+ "lazyStartProducer": { "index": 15, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
+ "gitConfigFile": { "index": 16, "kind": "parameter", "displayName": "Git
Config File", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "A String with path to a
.gitconfig file" },
+ "backoffErrorThreshold": { "index": 17, "kind": "parameter",
"displayName": "Backoff Error Threshold", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int",
"deprecated": false, "autowired": false, "secret": false, "description": "The
number of subsequent error polls (failed due some error) that should happen
before the backoffMultipler should kick-in." },
+ "backoffIdleThreshold": { "index": 18, "kind": "parameter", "displayName":
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "The number of subsequent
idle polls that should happen before the backoffMultipler should kick-in." },
+ "backoffMultiplier": { "index": 19, "kind": "parameter", "displayName":
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "To let the scheduled
polling consumer backoff if there has been a number of subsequent idles\/errors
in a row. The multiplier is then the number of polls that will be skipped
before the next actual attempt is h [...]
+ "delay": { "index": 20, "kind": "parameter", "displayName": "Delay",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 500, "description": "Milliseconds before the
next poll." },
+ "greedy": { "index": 21, "kind": "parameter", "displayName": "Greedy",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If greedy is enabled,
then the ScheduledPollConsumer will run immediately again, if the previous run
polled 1 or more messages." },
+ "initialDelay": { "index": 22, "kind": "parameter", "displayName":
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "long", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": 1000, "description":
"Milliseconds before the first poll starts." },
+ "repeatCount": { "index": 23, "kind": "parameter", "displayName": "Repeat
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit
of number of fires. So if you set it to 1, the scheduler will only fire once.
If you set it to 5, it will only fire five times. A value of zero or negative
means fire forever." },
+ "runLoggingLevel": { "index": 24, "kind": "parameter", "displayName": "Run
Logging Level", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel",
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated":
false, "autowired": false, "secret": false, "defaultValue": "TRACE",
"description": "The consumer logs a start\/complete log line when it polls.
This option allows you to configure the log [...]
+ "scheduledExecutorService": { "index": 25, "kind": "parameter",
"displayName": "Scheduled Executor Service", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "object", "javaType":
"java.util.concurrent.ScheduledExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Allows for configuring a
custom\/shared thread pool to use for the consumer. By default each consumer
has its own single threaded thread pool." },
+ "scheduler": { "index": 26, "kind": "parameter", "displayName":
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "none", "description": "To
use a cron scheduler from either camel-spring or camel-quartz component. Use
value spring or quartz for built in scheduler" },
+ "schedulerProperties": { "index": 27, "kind": "parameter", "displayName":
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.",
"multiValue": true, "deprecated": false, "autowired": false, "secret": false,
"description": "To configure additional properties when using a custom
scheduler or any of the Quartz, Spring based scheduler. This i [...]
+ "startScheduler": { "index": 28, "kind": "parameter", "displayName":
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"description": "Whether the scheduler should be auto started." },
+ "timeUnit": { "index": 29, "kind": "parameter", "displayName": "Time
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS",
"DAYS" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and
delay options." },
+ "useFixedDelay": { "index": 30, "kind": "parameter", "displayName": "Use
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in
JDK for details." },
+ "password": { "index": 31, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository password" },
+ "username": { "index": 32, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository username" }
}
}
diff --git
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
index 40684aba086c..d23a53d56d1d 100644
---
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
+++
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointConfigurer.java
@@ -36,6 +36,7 @@ public class GitEndpointConfigurer extends
PropertyConfigurerSupport implements
case "bridgeerrorhandler":
case "bridgeErrorHandler":
target.setBridgeErrorHandler(property(camelContext, boolean.class, value));
return true;
case "delay": target.setDelay(property(camelContext, long.class,
value)); return true;
+ case "depth": target.setDepth(property(camelContext, int.class,
value)); return true;
case "exceptionhandler":
case "exceptionHandler":
target.setExceptionHandler(property(camelContext,
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
case "exchangepattern":
@@ -98,6 +99,7 @@ public class GitEndpointConfigurer extends
PropertyConfigurerSupport implements
case "bridgeerrorhandler":
case "bridgeErrorHandler": return boolean.class;
case "delay": return long.class;
+ case "depth": return int.class;
case "exceptionhandler":
case "exceptionHandler": return
org.apache.camel.spi.ExceptionHandler.class;
case "exchangepattern":
@@ -161,6 +163,7 @@ public class GitEndpointConfigurer extends
PropertyConfigurerSupport implements
case "bridgeerrorhandler":
case "bridgeErrorHandler": return target.isBridgeErrorHandler();
case "delay": return target.getDelay();
+ case "depth": return target.getDepth();
case "exceptionhandler":
case "exceptionHandler": return target.getExceptionHandler();
case "exchangepattern":
diff --git
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
index 699008cdee0b..845bf2d81f2d 100644
---
a/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
+++
b/components/camel-git/src/generated/java/org/apache/camel/component/git/GitEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class GitEndpointUriFactory extends
org.apache.camel.support.component.En
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Map<String, String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(32);
+ Set<String> props = new HashSet<>(33);
props.add("allowEmpty");
props.add("backoffErrorThreshold");
props.add("backoffIdleThreshold");
@@ -31,6 +31,7 @@ public class GitEndpointUriFactory extends
org.apache.camel.support.component.En
props.add("branchName");
props.add("bridgeErrorHandler");
props.add("delay");
+ props.add("depth");
props.add("exceptionHandler");
props.add("exchangePattern");
props.add("gitConfigFile");
diff --git
a/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
b/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
index f648b7ca2ec4..fc475b1d1f74 100644
---
a/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
+++
b/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
@@ -55,28 +55,29 @@
"exchangePattern": { "index": 6, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
"pollStrategy": { "index": 7, "kind": "parameter", "displayName": "Poll
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced",
"required": false, "type": "object", "javaType":
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false,
"autowired": false, "secret": false, "description": "A pluggable
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your
custom implementation to control error handling usually occurred during the pol
[...]
"allowEmpty": { "index": 8, "kind": "parameter", "displayName": "Allow
Empty", "group": "producer", "label": "producer", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": true, "description": "The
flag to manage empty git commits" },
- "operation": { "index": 9, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick",
"clean", "clone", "commit", "commitAll", "createBranch", "createTag",
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd",
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated":
false, "autowired": false, "secret": false, " [...]
- "remoteName": { "index": 10, "kind": "parameter", "displayName": "Remote
Name", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository name to use in
particular operation like pull" },
- "remotePath": { "index": 11, "kind": "parameter", "displayName": "Remote
Path", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository path" },
- "tagName": { "index": 12, "kind": "parameter", "displayName": "Tag Name",
"group": "producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "The tag name to work on" },
- "targetBranchName": { "index": 13, "kind": "parameter", "displayName":
"Target Branch Name", "group": "producer", "label": "producer", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "master", "description":
"Name of target branch in merge operation. If not supplied will try to use
init.defaultBranch git configs. If not configured will use default value" },
- "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
- "gitConfigFile": { "index": 15, "kind": "parameter", "displayName": "Git
Config File", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "A String with path to a
.gitconfig file" },
- "backoffErrorThreshold": { "index": 16, "kind": "parameter",
"displayName": "Backoff Error Threshold", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int",
"deprecated": false, "autowired": false, "secret": false, "description": "The
number of subsequent error polls (failed due some error) that should happen
before the backoffMultipler should kick-in." },
- "backoffIdleThreshold": { "index": 17, "kind": "parameter", "displayName":
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "The number of subsequent
idle polls that should happen before the backoffMultipler should kick-in." },
- "backoffMultiplier": { "index": 18, "kind": "parameter", "displayName":
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "To let the scheduled
polling consumer backoff if there has been a number of subsequent idles\/errors
in a row. The multiplier is then the number of polls that will be skipped
before the next actual attempt is h [...]
- "delay": { "index": 19, "kind": "parameter", "displayName": "Delay",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 500, "description": "Milliseconds before the
next poll." },
- "greedy": { "index": 20, "kind": "parameter", "displayName": "Greedy",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If greedy is enabled,
then the ScheduledPollConsumer will run immediately again, if the previous run
polled 1 or more messages." },
- "initialDelay": { "index": 21, "kind": "parameter", "displayName":
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "long", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": 1000, "description":
"Milliseconds before the first poll starts." },
- "repeatCount": { "index": 22, "kind": "parameter", "displayName": "Repeat
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit
of number of fires. So if you set it to 1, the scheduler will only fire once.
If you set it to 5, it will only fire five times. A value of zero or negative
means fire forever." },
- "runLoggingLevel": { "index": 23, "kind": "parameter", "displayName": "Run
Logging Level", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel",
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated":
false, "autowired": false, "secret": false, "defaultValue": "TRACE",
"description": "The consumer logs a start\/complete log line when it polls.
This option allows you to configure the log [...]
- "scheduledExecutorService": { "index": 24, "kind": "parameter",
"displayName": "Scheduled Executor Service", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "object", "javaType":
"java.util.concurrent.ScheduledExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Allows for configuring a
custom\/shared thread pool to use for the consumer. By default each consumer
has its own single threaded thread pool." },
- "scheduler": { "index": 25, "kind": "parameter", "displayName":
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "none", "description": "To
use a cron scheduler from either camel-spring or camel-quartz component. Use
value spring or quartz for built in scheduler" },
- "schedulerProperties": { "index": 26, "kind": "parameter", "displayName":
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.",
"multiValue": true, "deprecated": false, "autowired": false, "secret": false,
"description": "To configure additional properties when using a custom
scheduler or any of the Quartz, Spring based scheduler. This i [...]
- "startScheduler": { "index": 27, "kind": "parameter", "displayName":
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"description": "Whether the scheduler should be auto started." },
- "timeUnit": { "index": 28, "kind": "parameter", "displayName": "Time
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS",
"DAYS" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and
delay options." },
- "useFixedDelay": { "index": 29, "kind": "parameter", "displayName": "Use
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in
JDK for details." },
- "password": { "index": 30, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository password" },
- "username": { "index": 31, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository username" }
+ "depth": { "index": 9, "kind": "parameter", "displayName": "Depth",
"group": "producer", "label": "producer", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"description": "Clone depth for shallow clones. A value of 1 fetches only the
latest commit. When set to 0 or not specified, a full clone is performed." },
+ "operation": { "index": 10, "kind": "parameter", "displayName":
"Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "add", "cherryPick",
"clean", "clone", "commit", "commitAll", "createBranch", "createTag",
"deleteBranch", "deleteTag", "gc", "init", "log", "pull", "push", "remoteAdd",
"remoteList", "remove", "showBranches", "showTags", "status" ], "deprecated":
false, "autowired": false, "secret": false, [...]
+ "remoteName": { "index": 11, "kind": "parameter", "displayName": "Remote
Name", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository name to use in
particular operation like pull" },
+ "remotePath": { "index": 12, "kind": "parameter", "displayName": "Remote
Path", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "The remote repository path" },
+ "tagName": { "index": 13, "kind": "parameter", "displayName": "Tag Name",
"group": "producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "The tag name to work on" },
+ "targetBranchName": { "index": 14, "kind": "parameter", "displayName":
"Target Branch Name", "group": "producer", "label": "producer", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "master", "description":
"Name of target branch in merge operation. If not supplied will try to use
init.defaultBranch git configs. If not configured will use default value" },
+ "lazyStartProducer": { "index": 15, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
+ "gitConfigFile": { "index": 16, "kind": "parameter", "displayName": "Git
Config File", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "A String with path to a
.gitconfig file" },
+ "backoffErrorThreshold": { "index": 17, "kind": "parameter",
"displayName": "Backoff Error Threshold", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int",
"deprecated": false, "autowired": false, "secret": false, "description": "The
number of subsequent error polls (failed due some error) that should happen
before the backoffMultipler should kick-in." },
+ "backoffIdleThreshold": { "index": 18, "kind": "parameter", "displayName":
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "The number of subsequent
idle polls that should happen before the backoffMultipler should kick-in." },
+ "backoffMultiplier": { "index": 19, "kind": "parameter", "displayName":
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "description": "To let the scheduled
polling consumer backoff if there has been a number of subsequent idles\/errors
in a row. The multiplier is then the number of polls that will be skipped
before the next actual attempt is h [...]
+ "delay": { "index": 20, "kind": "parameter", "displayName": "Delay",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 500, "description": "Milliseconds before the
next poll." },
+ "greedy": { "index": 21, "kind": "parameter", "displayName": "Greedy",
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If greedy is enabled,
then the ScheduledPollConsumer will run immediately again, if the previous run
polled 1 or more messages." },
+ "initialDelay": { "index": 22, "kind": "parameter", "displayName":
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "integer", "javaType": "long", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": 1000, "description":
"Milliseconds before the first poll starts." },
+ "repeatCount": { "index": 23, "kind": "parameter", "displayName": "Repeat
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit
of number of fires. So if you set it to 1, the scheduler will only fire once.
If you set it to 5, it will only fire five times. A value of zero or negative
means fire forever." },
+ "runLoggingLevel": { "index": 24, "kind": "parameter", "displayName": "Run
Logging Level", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel",
"enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated":
false, "autowired": false, "secret": false, "defaultValue": "TRACE",
"description": "The consumer logs a start\/complete log line when it polls.
This option allows you to configure the log [...]
+ "scheduledExecutorService": { "index": 25, "kind": "parameter",
"displayName": "Scheduled Executor Service", "group": "scheduler", "label":
"consumer,scheduler", "required": false, "type": "object", "javaType":
"java.util.concurrent.ScheduledExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Allows for configuring a
custom\/shared thread pool to use for the consumer. By default each consumer
has its own single threaded thread pool." },
+ "scheduler": { "index": 26, "kind": "parameter", "displayName":
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "none", "description": "To
use a cron scheduler from either camel-spring or camel-quartz component. Use
value spring or quartz for built in scheduler" },
+ "schedulerProperties": { "index": 27, "kind": "parameter", "displayName":
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.",
"multiValue": true, "deprecated": false, "autowired": false, "secret": false,
"description": "To configure additional properties when using a custom
scheduler or any of the Quartz, Spring based scheduler. This i [...]
+ "startScheduler": { "index": 28, "kind": "parameter", "displayName":
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"description": "Whether the scheduler should be auto started." },
+ "timeUnit": { "index": 29, "kind": "parameter", "displayName": "Time
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false,
"type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS",
"DAYS" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and
delay options." },
+ "useFixedDelay": { "index": 30, "kind": "parameter", "displayName": "Use
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in
JDK for details." },
+ "password": { "index": 31, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository password" },
+ "username": { "index": 32, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "producer,security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "description": "Remote repository username" }
}
}
diff --git a/components/camel-git/src/main/docs/git-component.adoc
b/components/camel-git/src/main/docs/git-component.adoc
index 595279bdbb06..b5818d89d9c8 100644
--- a/components/camel-git/src/main/docs/git-component.adoc
+++ b/components/camel-git/src/main/docs/git-component.adoc
@@ -75,6 +75,18 @@ from("git:///tmp/testRepo?type=commit")
.to(....)
---------------------------------------
+=== Shallow Clone
+
+Use the `depth` option to perform a shallow clone, fetching only a limited
number of commits. This reduces clone time and disk usage for large
repositories when full history is not needed.
+
+[source,java]
+---------------------------------------
+from("direct:clone")
+
.to("git:///tmp/myRepo?operation=clone&remotePath=https://github.com/example/repo.git&depth=1");
+---------------------------------------
+
+A `depth` of 1 fetches only the latest commit. When set to 0 or omitted, a
full clone is performed.
+
=== Custom config file
By default, camel-git will load ``.gitconfig`` file from user home folder.
diff --git
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
index 59ccfcf4c879..2c8a4aa2b734 100644
---
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
+++
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
@@ -73,6 +73,11 @@ public class GitEndpoint extends ScheduledPollEndpoint {
@Metadata(label = "producer")
private boolean allowEmpty = true;
+ @UriParam(label = "producer",
+ description = "Clone depth for shallow clones. A value of 1
fetches only the latest commit. "
+ + "When set to 0 or not specified, a full clone is
performed.")
+ private int depth;
+
@UriParam(label = "producer",
enums =
"add,cherryPick,clean,clone,commit,commitAll,createBranch,createTag,deleteBranch,deleteTag,gc,init,log,pull,push,remoteAdd,remoteList,remove,showBranches,showTags,status")
private String operation;
@@ -91,15 +96,11 @@ public class GitEndpoint extends ScheduledPollEndpoint {
@Override
public Consumer createConsumer(Processor processor) throws Exception {
- if (type == GitType.COMMIT) {
- return new GitCommitConsumer(this, processor);
- } else if (type == GitType.TAG) {
- return new GitTagConsumer(this, processor);
- } else if (type == GitType.BRANCH) {
- return new GitBranchConsumer(this, processor);
- } else {
- throw new IllegalArgumentException("Cannot create consumer with
type " + type);
- }
+ return switch (type) {
+ case COMMIT -> new GitCommitConsumer(this, processor);
+ case TAG -> new GitTagConsumer(this, processor);
+ case BRANCH -> new GitBranchConsumer(this, processor);
+ };
}
/**
@@ -212,6 +213,17 @@ public class GitEndpoint extends ScheduledPollEndpoint {
this.allowEmpty = allowEmpty;
}
+ /**
+ * Clone depth for shallow clones
+ */
+ public int getDepth() {
+ return depth;
+ }
+
+ public void setDepth(int depth) {
+ this.depth = depth;
+ }
+
/**
* The branch name to merge
*/
diff --git
a/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
b/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
index 1bf2c8118b31..6fd1349f75ca 100644
---
a/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
+++
b/components/camel-git/src/main/java/org/apache/camel/component/git/RepositoryFactory.java
@@ -24,12 +24,10 @@ import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Arrays;
import java.util.List;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.support.ResourceHelper;
-import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
@@ -38,7 +36,7 @@ import org.eclipse.jgit.util.SystemReader;
public abstract class RepositoryFactory {
private static final SystemReader DEFAULT_INSTANCE;
- private static final List<String> VALID_SCHEMES =
Arrays.asList("classpath:", "file:", "http:", "https:");
+ private static final List<String> VALID_SCHEMES = List.of("classpath:",
"file:", "http:", "https:");
static {
DEFAULT_INSTANCE = SystemReader.getInstance();
@@ -105,12 +103,9 @@ public abstract class RepositoryFactory {
private static File getTempFileFromHttp(String url) throws IOException {
Path tempFile = Files.createTempFile(null, null);
- FileOutputStream outputStream = new
FileOutputStream(tempFile.toString());
- try {
- ReadableByteChannel byteChannel =
Channels.newChannel(URI.create(url).toURL().openStream());
+ try (ReadableByteChannel byteChannel =
Channels.newChannel(URI.create(url).toURL().openStream());
+ FileOutputStream outputStream = new
FileOutputStream(tempFile.toString())) {
outputStream.getChannel().transferFrom(byteChannel, 0,
Long.MAX_VALUE);
- } finally {
- IOHelper.close(outputStream);
}
return tempFile.toFile();
}
diff --git
a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
index 5079684f8ae1..fc87b50f408d 100644
---
a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
+++
b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
@@ -204,30 +204,26 @@ public class GitProducer extends DefaultProducer {
throw new IllegalArgumentException("Local path must specified to
execute " + operation);
}
try {
- File localRepo = new File(endpoint.getLocalPath(), "");
+ File localRepo = new File(endpoint.getLocalPath());
if (!localRepo.exists()) {
- if (ObjectHelper.isNotEmpty(endpoint.getUsername()) &&
ObjectHelper.isNotEmpty(endpoint.getPassword())) {
- UsernamePasswordCredentialsProvider credentials
- = new
UsernamePasswordCredentialsProvider(endpoint.getUsername(),
endpoint.getPassword());
- if (ObjectHelper.isEmpty(endpoint.getBranchName())) {
- result =
Git.cloneRepository().setCredentialsProvider(credentials).setURI(endpoint.getRemotePath())
- .setDirectory(new
File(endpoint.getLocalPath(), ""))
- .call();
- } else {
- result =
Git.cloneRepository().setCredentialsProvider(credentials).setURI(endpoint.getRemotePath())
- .setDirectory(new
File(endpoint.getLocalPath(), ""))
- .setBranch(endpoint.getBranchName()).call();
- }
- } else {
- if (ObjectHelper.isEmpty(endpoint.getBranchName())) {
- result =
Git.cloneRepository().setURI(endpoint.getRemotePath())
- .setDirectory(new
File(endpoint.getLocalPath(), "")).call();
- } else {
- result =
Git.cloneRepository().setURI(endpoint.getRemotePath())
- .setDirectory(new
File(endpoint.getLocalPath(), "")).setBranch(endpoint.getBranchName())
- .call();
- }
+ var cloneCommand = Git.cloneRepository()
+ .setURI(endpoint.getRemotePath())
+ .setDirectory(localRepo);
+
+ if (ObjectHelper.isNotEmpty(endpoint.getBranchName())) {
+ cloneCommand.setBranch(endpoint.getBranchName());
+ }
+ if (ObjectHelper.isNotEmpty(endpoint.getUsername())
+ && ObjectHelper.isNotEmpty(endpoint.getPassword())) {
+ cloneCommand.setCredentialsProvider(
+ new UsernamePasswordCredentialsProvider(
+ endpoint.getUsername(),
endpoint.getPassword()));
+ }
+ if (endpoint.getDepth() > 0) {
+ cloneCommand.setDepth(endpoint.getDepth());
}
+
+ result = cloneCommand.call();
} else {
throw new IllegalArgumentException("The local repository
directory already exists");
}
@@ -264,7 +260,7 @@ public class GitProducer extends DefaultProducer {
throw new IllegalArgumentException("Local path must specified to
execute " + operation);
}
try {
- result = Git.init().setDirectory(new File(endpoint.getLocalPath(),
"")).setBare(false).call();
+ result = Git.init().setDirectory(new
File(endpoint.getLocalPath())).setBare(false).call();
} catch (GitAPIException e) {
LOG.error("There was an error in Git {} operation", operation);
throw e;
@@ -585,10 +581,11 @@ public class GitProducer extends DefaultProducer {
} else {
throw new IllegalArgumentException("Commit id must be
specified to execute " + operation);
}
- RevWalk walk = new RevWalk(repo);
- ObjectId id = repo.resolve(commitId);
- RevCommit commit = walk.parseCommit(id);
- walk.dispose();
+ RevCommit commit;
+ try (RevWalk walk = new RevWalk(repo)) {
+ ObjectId id = repo.resolve(commitId);
+ commit = walk.parseCommit(id);
+ }
if (ObjectHelper.isNotEmpty(endpoint.getBranchName())) {
git.checkout().setCreateBranch(false).setName(endpoint.getBranchName()).call();
}
diff --git
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
index c7996e9af109..ea1d54f72d57 100644
---
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
+++
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerCommitTest.java
@@ -39,7 +39,7 @@ public class GitConsumerCommitTest extends GitTestSupport {
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
diff --git
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
index c722a8bfa17c..124a69a9ca96 100644
---
a/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
+++
b/components/camel-git/src/test/java/org/apache/camel/component/git/consumer/GitConsumerTest.java
@@ -41,7 +41,7 @@ public class GitConsumerTest extends GitTestSupport {
mockResultCommit.expectedMessageCount(0);
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -70,7 +70,7 @@ public class GitConsumerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -82,7 +82,7 @@ public class GitConsumerTest extends GitTestSupport {
tagCreated = true;
}
}
- assertEquals(true, tagCreated);
+ assertTrue(tagCreated);
// Test
mockResultTag.assertIsSatisfied();
@@ -104,7 +104,7 @@ public class GitConsumerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -116,7 +116,7 @@ public class GitConsumerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
// Test
mockResultBranch.assertIsSatisfied();
diff --git
a/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
b/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
index 2cb1d2f7029b..6c4b5b01c26c 100644
---
a/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
+++
b/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
@@ -26,8 +26,6 @@ import java.util.Properties;
import java.util.Set;
import org.apache.camel.CamelExecutionException;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.git.GitConstants;
import org.apache.camel.component.git.GitTestSupport;
@@ -56,14 +54,14 @@ public class GitProducerTest extends GitTestSupport {
public void cloneTest() {
template.sendBody("direct:clone", "");
File gitDir = new File(getCloneDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
}
@Test
public void initTest() {
template.sendBody("direct:init", "");
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
}
@Test
@@ -71,7 +69,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -90,7 +88,7 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
git.close();
}
@@ -102,7 +100,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -118,7 +116,7 @@ public class GitProducerTest extends GitTestSupport {
tagCreated = true;
}
}
- assertEquals(true, tagCreated);
+ assertTrue(tagCreated);
// Test camel-git create-branch
template.sendBody("direct:checkout-specific-tag", "");
@@ -131,7 +129,42 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
+ git.close();
+ }
+
+ @Test
+ public void shallowCloneTest() throws Exception {
+ // Init - create multiple commits in the source repo
+ Git git = getGitTestRepository();
+ File fileToAdd = new File(getGitDir(), filenameToAdd);
+ fileToAdd.createNewFile();
+ git.add().addFilepattern(filenameToAdd).call();
+ git.commit().setMessage("First commit").call();
+
+ File fileToAdd2 = new File(getGitDir(), filenameBranchToAdd);
+ fileToAdd2.createNewFile();
+ git.add().addFilepattern(filenameBranchToAdd).call();
+ git.commit().setMessage("Second commit").call();
+
+ // Verify source repo has 2 commits
+ validateGitLogs(git, "Second commit", "First commit");
+
+ // Test camel-git shallow clone with depth=1
+ template.sendBody("direct:clone-shallow", "");
+
+ // Check that clone dir exists
+ File gitDir = new File(getCloneDir(), ".git");
+ assertTrue(gitDir.exists());
+
+ // Verify only 1 commit in shallow clone
+ Git clonedGit = Git.open(getCloneDir());
+ int commitCount = 0;
+ for (RevCommit ignored : clonedGit.log().call()) {
+ commitCount++;
+ }
+ assertEquals(1, commitCount);
+ clonedGit.close();
git.close();
}
@@ -142,14 +175,14 @@ public class GitProducerTest extends GitTestSupport {
assertThrows(CamelExecutionException.class, () ->
template.sendBody("direct:clone", ""));
File gitDir = new File(getCloneDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
}
@Test
public void pullTest() {
template.sendBody("direct:clone", "");
File gitDir = new File(getCloneDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
PullResult pr = template.requestBody("direct:pull", "",
PullResult.class);
assertTrue(pr.isSuccessful());
}
@@ -164,7 +197,7 @@ public class GitProducerTest extends GitTestSupport {
template.sendBodyAndHeader("direct:add", "",
GitConstants.GIT_FILE_NAME, filenameToAdd);
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.close();
@@ -175,7 +208,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -187,7 +220,7 @@ public class GitProducerTest extends GitTestSupport {
// Check
gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
git.commit().setMessage(commitMessage).call();
validateGitLogs(git, commitMessage);
status = git.status().call();
@@ -218,7 +251,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -239,7 +272,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -261,7 +294,7 @@ public class GitProducerTest extends GitTestSupport {
// Initialize repository using JGit
Repository repository = getTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Git git = new Git(repository);
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
@@ -279,7 +312,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -290,12 +323,8 @@ public class GitProducerTest extends GitTestSupport {
git.checkout().setCreateBranch(true).setName(branchTest).setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM).call();
// Test camel-git commit (with branch)
- template.send("direct:commit-branch", new Processor() {
- @Override
- public void process(Exchange exchange) {
- exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE,
commitMessageBranch);
- }
- });
+ template.send("direct:commit-branch",
+ exchange ->
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE,
commitMessageBranch));
validateGitLogs(git, commitMessageBranch, commitMessage);
git.close();
}
@@ -307,12 +336,8 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
- template.send("direct:commit-all", new Processor() {
- @Override
- public void process(Exchange exchange) {
- exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE,
commitMessageAll);
- }
- });
+ template.send("direct:commit-all",
+ exchange ->
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, commitMessageAll));
validateGitLogs(git, commitMessageAll);
git.close();
}
@@ -322,7 +347,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -335,19 +360,11 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd1.createNewFile();
// Test camel-git add and commit (different branches)
- template.send("direct:add-on-branch", new Processor() {
- @Override
- public void process(Exchange exchange) {
- exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME,
filenameBranchToAdd);
- }
- });
+ template.send("direct:add-on-branch",
+ exchange ->
exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME, filenameBranchToAdd));
- template.send("direct:commit-all-branch", new Processor() {
- @Override
- public void process(Exchange exchange) {
- exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE,
commitMessageAll);
- }
- });
+ template.send("direct:commit-all-branch",
+ exchange ->
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, commitMessageAll));
// Check
validateGitLogs(git, commitMessageAll, commitMessage);
@@ -359,7 +376,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -375,12 +392,8 @@ public class GitProducerTest extends GitTestSupport {
validateGitLogs(git, commitMessageAll, commitMessage);
// Test camel-git remove
- template.send("direct:remove-on-branch", new Processor() {
- @Override
- public void process(Exchange exchange) {
- exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME,
filenameToAdd);
- }
- });
+ template.send("direct:remove-on-branch",
+ exchange ->
exchange.getIn().setHeader(GitConstants.GIT_FILE_NAME, filenameToAdd));
// Check
git.checkout().setCreateBranch(false).setName(branchTest).call();
@@ -394,7 +407,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -413,7 +426,7 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
git.close();
}
@@ -425,7 +438,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -437,7 +450,7 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
// Test camel-git delete-branch
template.sendBody("direct:delete-branch", "");
@@ -449,7 +462,7 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(false, branchCreated);
+ assertFalse(branchCreated);
git.close();
}
@@ -461,7 +474,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
// Test camel-git status
Status status = template.requestBody("direct:status", "",
Status.class);
@@ -481,7 +494,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -493,7 +506,7 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
File fileToAddDifferent = new File(getGitDir(), filenameBranchToAdd);
fileToAddDifferent.createNewFile();
git.add().addFilepattern(filenameBranchToAdd).call();
@@ -517,7 +530,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -543,7 +556,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -555,7 +568,7 @@ public class GitProducerTest extends GitTestSupport {
branchCreated = true;
}
}
- assertEquals(true, branchCreated);
+ assertTrue(branchCreated);
File fileToAddDifferent = new File(getGitDir(), filenameBranchToAdd);
fileToAddDifferent.createNewFile();
git.add().addFilepattern(filenameBranchToAdd).call();
@@ -582,7 +595,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -598,7 +611,7 @@ public class GitProducerTest extends GitTestSupport {
tagCreated = true;
}
}
- assertEquals(true, tagCreated);
+ assertTrue(tagCreated);
git.close();
}
@@ -610,7 +623,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -622,7 +635,7 @@ public class GitProducerTest extends GitTestSupport {
tagCreated = true;
}
}
- assertEquals(true, tagCreated);
+ assertTrue(tagCreated);
// Test camel-git delete-tag
template.sendBody("direct:delete-tag", "");
@@ -635,7 +648,7 @@ public class GitProducerTest extends GitTestSupport {
tagExists = true;
}
}
- assertEquals(false, tagExists);
+ assertFalse(tagExists);
git.close();
}
@@ -647,7 +660,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -675,7 +688,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -715,7 +728,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -752,7 +765,7 @@ public class GitProducerTest extends GitTestSupport {
public void remoteAddTest() throws Exception {
Repository repository = getTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Git git = new Git(repository);
List<RemoteConfig> remoteConfigList = git.remoteList().call();
assertEquals(0, remoteConfigList.size());
@@ -770,7 +783,7 @@ public class GitProducerTest extends GitTestSupport {
public void remoteListTest() throws Exception {
Repository repository = getTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Git git = new Git(repository);
RemoteAddCommand remoteAddCommand = git.remoteAdd();
remoteAddCommand.setName("origin");
@@ -797,7 +810,7 @@ public class GitProducerTest extends GitTestSupport {
= template.requestBodyAndHeader("direct:clean", "",
GitConstants.GIT_FILE_NAME, filenameToAdd, Set.class);
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
assertTrue(cleaned.contains(filenameToAdd));
git.close();
}
@@ -806,7 +819,7 @@ public class GitProducerTest extends GitTestSupport {
public void gcTest() throws Exception {
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -833,7 +846,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -844,12 +857,8 @@ public class GitProducerTest extends GitTestSupport {
git.checkout().setCreateBranch(true).setName(branchTest).setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM).call();
// Test camel-git commit (with branch)
- template.send("direct:commit-branch", new Processor() {
- @Override
- public void process(Exchange exchange) {
- exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE,
commitMessageBranch);
- }
- });
+ template.send("direct:commit-branch",
+ exchange ->
exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE,
commitMessageBranch));
validateGitLogs(git, commitMessageBranch, commitMessage);
// Test camel-git commit (with branch)
@@ -866,7 +875,7 @@ public class GitProducerTest extends GitTestSupport {
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
Status status = git.status().call();
assertTrue(status.getAdded().contains(filenameToAdd));
git.commit().setMessage(commitMessage).call();
@@ -882,7 +891,7 @@ public class GitProducerTest extends GitTestSupport {
tagCreated = true;
}
}
- assertEquals(true, tagCreated);
+ assertTrue(tagCreated);
git.close();
}
@@ -891,7 +900,7 @@ public class GitProducerTest extends GitTestSupport {
// Init
Git git = getGitTestRepository();
File gitDir = new File(getGitDir(), ".git");
- assertEquals(true, gitDir.exists());
+ assertTrue(gitDir.exists());
File fileToAdd = new File(getGitDir(), filenameToAdd);
fileToAdd.createNewFile();
git.add().addFilepattern(filenameToAdd).call();
@@ -928,6 +937,8 @@ public class GitProducerTest extends GitTestSupport {
public void configure() {
from("direct:clone").to("git://" + cloneDir
+
"?remotePath=https://github.com/oscerd/json-webserver-example.git&operation=clone");
+ from("direct:clone-shallow").to("git://" + cloneDir
+ + "?remotePath=" +
getGitDir().toURI() + "&operation=clone&depth=1");
from("direct:init").to("git://" + dir + "?operation=init");
from("direct:add").to("git://" + dir + "?operation=add");
from("direct:checkout").to("git://" + dir +
"?operation=checkout&branchName=" + branchTest);
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
index 05f9da4595b7..02f2ce2c8306 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GitEndpointBuilderFactory.java
@@ -810,6 +810,36 @@ public interface GitEndpointBuilderFactory {
doSetProperty("allowEmpty", allowEmpty);
return this;
}
+ /**
+ * Clone depth for shallow clones. A value of 1 fetches only the latest
+ * commit. When set to 0 or not specified, a full clone is performed.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Group: producer
+ *
+ * @param depth the value to set
+ * @return the dsl builder
+ */
+ default GitEndpointProducerBuilder depth(int depth) {
+ doSetProperty("depth", depth);
+ return this;
+ }
+ /**
+ * Clone depth for shallow clones. A value of 1 fetches only the latest
+ * commit. When set to 0 or not specified, a full clone is performed.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Group: producer
+ *
+ * @param depth the value to set
+ * @return the dsl builder
+ */
+ default GitEndpointProducerBuilder depth(String depth) {
+ doSetProperty("depth", depth);
+ return this;
+ }
/**
* The operation to do on the repository.
*