[java-identity-provider] 33/51: IDP-1121 sourceAttributeID is no more for attributes.
Rod Widdowson
rdw at steadingsoftware.com
Wed Feb 6 08:43:04 EST 2019
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=51885e9dab87a44af6073cc698a3456889e985fb
commit 51885e9dab87a44af6073cc698a3456889e985fb
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Jan 22 17:24:22 2019 +0000
IDP-1121 sourceAttributeID is no more for attributes.
https://issues.shibboleth.net/jira/browse/IDP-1121
Computed Data Connectors still have to be stripped.
---
.../resolver/AbstractAttributeDefinition.java | 22 --------------
.../ResolverAttributeDefinitionDependency.java | 34 ++--------------------
.../resolver/AbstractAttributeDefinitionTest.java | 2 --
.../resolver/AbstractResolverPluginTest.java | 4 ---
.../resolver/PluginDependencySupportTest.java | 12 --------
.../resolver/ResolvedAttributeDefinitionTest.java | 1 -
.../resolver/ResolvedDataConnectorTest.java | 1 -
.../spring/ad/BaseAttributeDefinitionParser.java | 10 -------
.../attribute/resolver/spring/mappedTemplate.xml | 2 +-
.../resolver/spring/mapperTest-attributes.xml | 10 +++----
.../resolver/spring/simpleDependencies.xml | 2 +-
.../schema/shibboleth-attribute-resolver.xsd | 17 ++---------
12 files changed, 12 insertions(+), 105 deletions(-)
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
index c335c91..8202da9 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinition.java
@@ -61,9 +61,6 @@ public abstract class AbstractAttributeDefinition extends AbstractResolverPlugin
/** Whether this attribute definition is only a dependency and thus its values should never be released. */
private boolean dependencyOnly;
- /** The sourceAttributeID attributeName. */
- @Nullable private String sourceAttributeID;
-
/** Attribute encoders associated with this definition. */
@Nonnull private Set<AttributeEncoder<?>> encoders = Collections.emptySet();
@@ -187,25 +184,6 @@ public abstract class AbstractAttributeDefinition extends AbstractResolverPlugin
encoders = ImmutableSet.copyOf(checkedEncoders);
}
- /**
- * Gets the source attribute id.
- * @deprecated - only used for old style dependencies
- * @return the source attribute id
- */
- public @Deprecated String getSourceAttributeId() {
- return sourceAttributeID;
- }
-
- /**
- * Sets the source attribute id.
- *
- * @param attributeId the source attribute id
- */
- public void setSourceAttributeId(final String attributeId) {
- ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
- sourceAttributeID = StringSupport.trimOrNull(attributeId);
- }
-
/** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverAttributeDefinitionDependency.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverAttributeDefinitionDependency.java
index d91b17c..f3ec9fd 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverAttributeDefinitionDependency.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/ResolverAttributeDefinitionDependency.java
@@ -38,9 +38,6 @@ public final class ResolverAttributeDefinitionDependency {
/** ID of the plugin that will produce the attribute. */
@Nonnull @NotEmpty private final String dependencyPluginId;
- /** ID of the attribute, produced by the identified plugin, whose values will be used by the dependent plugin. */
- @Nullable private String dependencyAttributeId;
-
/**
* Constructor.
*
@@ -62,33 +59,10 @@ public final class ResolverAttributeDefinitionDependency {
return dependencyPluginId;
}
- /**
- * Set the attributeId.
- *
- * @param attributeId ID of the attribute, produced by the identified plugin, whose values will be used by the
- * dependent plugin
- */
- public void setDependencyAttributeId(@Nullable final String attributeId) {
- dependencyAttributeId = StringSupport.trimOrNull(attributeId);
- }
-
- /**
- * Gets the ID of the attribute, produced by the identified plugin, whose values will be used by the dependent
- * plugin.
- *
- * @return ID of the attribute, produced by the identified plugin, whose values will be used by the dependent
- * plugin, never null or empty
- */
- @Nullable public String getDependencyAttributeId() {
- return dependencyAttributeId;
- }
-
/** {@inheritDoc} */
@Override
public int hashCode() {
- final int[] input = {getDependencyPluginId().hashCode(),
- getDependencyAttributeId()!=null?getDependencyAttributeId().hashCode(): 0};
- return Arrays.hashCode(input);
+ return getDependencyPluginId().hashCode();
}
/** {@inheritDoc} */
@@ -107,14 +81,12 @@ public final class ResolverAttributeDefinitionDependency {
}
final ResolverAttributeDefinitionDependency other = (ResolverAttributeDefinitionDependency) obj;
- return Objects.equals(getDependencyPluginId(), other.getDependencyPluginId())
- && Objects.equals(getDependencyAttributeId(), other.getDependencyAttributeId());
+ return Objects.equals(getDependencyPluginId(), other.getDependencyPluginId());
}
/** {@inheritDoc} */
@Override
public String toString() {
- return MoreObjects.toStringHelper(this).add("pluginId", dependencyPluginId)
- .add("attributeId", dependencyAttributeId).toString();
+ return MoreObjects.toStringHelper(this).add("pluginId", getDependencyPluginId()).toString();
}
}
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
index e124afc..67fe772 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractAttributeDefinitionTest.java
@@ -203,13 +203,11 @@ public class AbstractAttributeDefinitionTest {
final Set<ResolverDataConnectorDependency> dDepends = definition.getDataConnectorDependencies();
Assert.assertEquals(dDepends.size(), 1);
- Assert.assertNull(definition.getSourceAttributeId());
Assert.assertTrue(dDepends.iterator().next().getAttributeNames().contains("da"));
Assert.assertEquals(dDepends.iterator().next().getDependencyPluginId(), "dc");
final Set<ResolverAttributeDefinitionDependency> aDepends = definition.getAttributeDependencies();
Assert.assertEquals(aDepends.size(), 1);
- Assert.assertNull(definition.getSourceAttributeId());
Assert.assertEquals(aDepends.iterator().next().getDependencyPluginId(), "ad");
}
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
index fe1a694..380d9a4 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
@@ -114,14 +114,10 @@ public class AbstractResolverPluginTest {
Assert.assertTrue(plugin.getDataConnectorDependencies().isEmpty());
final ResolverAttributeDefinitionDependency dep1 = new ResolverAttributeDefinitionDependency("foo");
- dep1.setDependencyAttributeId("bar");
final ResolverAttributeDefinitionDependency dep2 = new ResolverAttributeDefinitionDependency("foo2");
- dep2.setDependencyAttributeId("baz");
final ResolverDataConnectorDependency depd1 = new ResolverDataConnectorDependency("food");
- dep1.setDependencyAttributeId("bard");
final ResolverDataConnectorDependency depd2 = new ResolverDataConnectorDependency("food2");
- dep2.setDependencyAttributeId("bazd");
final HashSet<ResolverAttributeDefinitionDependency> adeps = new HashSet<>();
final HashSet<ResolverDataConnectorDependency> ddeps = new HashSet<>();
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java
index 7d1999e..e8e8ec5 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/PluginDependencySupportTest.java
@@ -309,18 +309,6 @@ public class PluginDependencySupportTest {
Assert.assertEquals(ad1.hashCode(), ad2.hashCode());
Assert.assertNotEquals(ad2.hashCode(), ad3.hashCode());
- ad1.setDependencyAttributeId("ra1");
- ad2.setDependencyAttributeId("bar");
- Assert.assertNotEquals(ad1, ad2);
- Assert.assertNotEquals(ad2, ad3);
- Assert.assertNotEquals(ad1.hashCode(), ad2.hashCode());
- Assert.assertNotEquals(ad2.hashCode(), ad3.hashCode());
-
- ad1.setDependencyAttributeId("bar");
- Assert.assertEquals(ad1, ad2);
- Assert.assertNotEquals(ad2, ad3);
- Assert.assertEquals(ad1.hashCode(), ad2.hashCode());
- Assert.assertNotEquals(ad2.hashCode(), ad3.hashCode());
}
@Test public void hashesDataConnectorDependency() {
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinitionTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinitionTest.java
index 9424a89..3bde4e9 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinitionTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedAttributeDefinitionTest.java
@@ -94,7 +94,6 @@ public class ResolvedAttributeDefinitionTest {
attrDef.setValue(attribute);
attrDef.setId("Defn");
final ResolverAttributeDefinitionDependency dep = new ResolverAttributeDefinitionDependency("doo");
- dep.setDependencyAttributeId("foo");
attrDef.setAttributeDependencies(Collections.singleton(dep));
final ResolverDataConnectorDependency ddep = new ResolverDataConnectorDependency("ddoo");
ddep.setAttributeNames(Collections.singletonList("foo"));
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnectorTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnectorTest.java
index d7583b2..c3f9191 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnectorTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/ResolvedDataConnectorTest.java
@@ -99,7 +99,6 @@ public class ResolvedDataConnectorTest {
dc.setId("Defn");
final ResolverAttributeDefinitionDependency dep = new ResolverAttributeDefinitionDependency("doo");
- dep.setDependencyAttributeId("foo");
dc.setAttributeDependencies(Collections.singleton(dep));
final ResolverDataConnectorDependency ddep = new ResolverDataConnectorDependency("ddoo");
ddep.setAttributeNames(Collections.singletonList("foo"));
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/BaseAttributeDefinitionParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/BaseAttributeDefinitionParser.java
index aecbfe6..276c791 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/BaseAttributeDefinitionParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/ad/BaseAttributeDefinitionParser.java
@@ -92,16 +92,6 @@ public abstract class BaseAttributeDefinitionParser extends BaseResolverPluginPa
builder.addPropertyValue("dependencyOnly", dependencyOnly);
}
- if (config.hasAttributeNS(null, "sourceAttributeID")) {
- final String sourceAttributeId = config.getAttributeNodeNS(null, "sourceAttributeID").getValue();
- log.debug("{} Setting sourceAttributeID {}", getLogPrefix(), sourceAttributeId);
- builder.addPropertyValue("sourceAttributeId", sourceAttributeId);
- DeprecationSupport.warnOnce(ObjectType.ATTRIBUTE, "sourceAttributeID",
- parserContext.getReaderContext().getResource().getDescription(),
- InputAttributeDefinitionParser.ELEMENT_NAME.getLocalPart() + " or "
- + InputDataConnectorParser.ELEMENT_NAME.getLocalPart());
- }
-
final List<Element> attributeEncoders =
ElementSupport.getChildElements(config, new QName(AttributeResolverNamespaceHandler.NAMESPACE,
"AttributeEncoder"));
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplate.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplate.xml
index c2280c2..cb8b7e8 100644
--- a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplate.xml
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mappedTemplate.xml
@@ -18,7 +18,7 @@
</AttributeDefinition>
<AttributeDefinition xsi:type="Mapped"
- id="mapped2" sourceAttributeID="attr1" dependencyOnly="true">
+ id="mapped2" dependencyOnly="true">
<InputDataConnector ref="static" attributeNames="attr2"/>
<DefaultValue>undefined</DefaultValue>
<ValueMap>
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest-attributes.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest-attributes.xml
index a27b2b5..76b690b 100644
--- a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest-attributes.xml
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/mapperTest-attributes.xml
@@ -21,27 +21,27 @@
</Attribute>
</DataConnector>
- <AttributeDefinition xsi:type="Simple" id="eduPersonAssurance" sourceAttributeID="assurance">
+ <AttributeDefinition xsi:type="Simple" id="eduPersonAssurance">
<InputDataConnector allAttributes="true" ref="staticAttributes" />
<AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:eduPersonAssurance" />
<AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" friendlyName="feduPersonAssurance" />
<AttributeEncoder xsi:type="SAML2String" nameFormat="http://example.org/Format" name="http://example.org/name/for/Attribute" friendlyName="fotherSAMLName" />
</AttributeDefinition>
- <AttributeDefinition xsi:type="Simple" id="otherPersonAssurance" sourceAttributeID="oAssurance">
+ <AttributeDefinition xsi:type="Simple" id="otherPersonAssurance" >
<InputDataConnector allAttributes="true" ref="staticAttributes" />
<AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:eduPersonAssurance" />
<AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" friendlyName="feduPersonAssurance" />
</AttributeDefinition>
- <AttributeDefinition xsi:type="Simple" id="otherFormatPersonAssurance" sourceAttributeID="ofAssurance">
+ <AttributeDefinition xsi:type="Simple" id="otherFormatPersonAssurance" >
<InputDataConnector allAttributes="true" ref="staticAttributes" />
<AttributeEncoder xsi:type="SAML1String" name="urn:mace:dir:attribute-def:eduPersonAssurance" />
<AttributeEncoder xsi:type="SAML2String" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.11" nameFormat="http://example.org/Format" friendlyName="fOeduPersonAssurance" />
</AttributeDefinition>
<AttributeDefinition xsi:type="Scoped" id="eduPersonScopedAffiliation" scope="example.org"
- sourceAttributeID="assurance">
+ >
<InputDataConnector allAttributes="true" ref="staticAttributes" />
<AttributeEncoder xsi:type="SAML1ScopedString" name="urn:mace:dir:attribute-def:eduPersonScopedAffiliation" />
<AttributeEncoder xsi:type="SAML2ScopedString" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.9" friendlyName="feduPersonScopedAffiliation"
@@ -49,7 +49,7 @@
</AttributeDefinition>
<AttributeDefinition xsi:type="SAML2NameID" id="eduPersonTID"
- nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" sourceAttributeID="eduPersonEntitlement">
+ nameIdFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" >
<InputDataConnector allAttributes="true" ref="staticAttributes" />
<AttributeEncoder xsi:type="SAML1XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" />
<AttributeEncoder xsi:type="SAML2XMLObject" name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" friendlyName="feduPersonTargetedID" />
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/simpleDependencies.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/simpleDependencies.xml
index 977a5c1..1a522bc 100644
--- a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/simpleDependencies.xml
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/simpleDependencies.xml
@@ -1,7 +1,7 @@
<AttributeDefinition
xmlns="urn:mace:shibboleth:2.0:resolver"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:type="Simple" id="simplePopulated" sourceAttributeID="flibble"
+ xsi:type="Simple" id="simplePopulated"
xsi:schemaLocation="urn:mace:shibboleth:2.0:resolver http://shibboleth.net/schema/idp/shibboleth-attribute-resolver.xsd">
<InputDataConnector ref="dep2" allAttributes="true"/>
diff --git a/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd b/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
index a642aa6..9687ccd 100644
--- a/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
+++ b/idp-schema/src/main/resources/schema/shibboleth-attribute-resolver.xsd
@@ -45,7 +45,6 @@
Definitions derived from this type need to explicitly include (as a choice)
the Dependency, DisplayName, DisplayDescription and Encoder sub elements
- Definitions derived from this type may add the sourceAttributeID element.
</documentation>
</annotation>
<complexContent>
@@ -386,7 +385,6 @@
</element>
<element name="ValueMap" type="resolver:ValueMapType" maxOccurs="unbounded"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
</extension>
</complexContent>
</complexType>
@@ -407,7 +405,6 @@
<element name="DisplayDescription" type="resolver:LocalizedStringType"/>
<element ref="resolver:AttributeEncoder"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
<attribute name="scopeDelimiter" type="string">
<annotation>
<documentation>Delimiter between the value and scope.</documentation>
@@ -460,7 +457,6 @@
<element name="DisplayDescription" type="resolver:LocalizedStringType"/>
<element ref="resolver:AttributeEncoder"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
<attribute name="regex" type="string" use="required">
<annotation>
<documentation>The regular expression used to split a value.</documentation>
@@ -490,7 +486,6 @@
<element name="DisplayDescription" type="resolver:LocalizedStringType"/>
<element ref="resolver:AttributeEncoder"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
<attribute name="nameIdFormat" type="string">
<annotation>
<documentation>The SAML 1 NameFormat of the NameID.</documentation>
@@ -518,7 +513,6 @@
<element name="DisplayDescription" type="resolver:LocalizedStringType"/>
<element ref="resolver:AttributeEncoder"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
<attribute name="nameIdFormat" type="string">
<annotation>
<documentation>The SAML 2 NameFormat of the NameID.</documentation>
@@ -551,7 +545,6 @@
<element name="DisplayDescription" type="resolver:LocalizedStringType"/>
<element ref="resolver:AttributeEncoder"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
<attribute name="scope" type="string" use="required">
<annotation>
<documentation>Value to use for scoping the attribute.</documentation>
@@ -570,8 +563,6 @@
a script attribute corresponding to the script variable whose name is the ID of the definition. This
variable is injected into the script by the attribute definition.
- NOTE that in this version Script does not have a sourceAttributeID - all the values for scripts
- come from the Dependency elements.
</documentation>
</annotation>
<complexContent>
@@ -628,7 +619,6 @@
<element name="DisplayDescription" type="resolver:LocalizedStringType"/>
<element ref="resolver:AttributeEncoder"/>
</choice>
- <attribute name="sourceAttributeID" type="string"/>
</extension>
</complexContent>
</complexType>
@@ -686,11 +676,8 @@
<element name="SourceAttribute" type="string" maxOccurs="unbounded">
<annotation>
<documentation>
- Attribute IDs which should be used in this definition, rather than the sourceAttributeID
- attribute. Each source attribute is available to be used in the Template as
- ${attribute_name}. If the source attribute has multiple values, only one value is
- available to the template at a time, but the template will be evaluated once for each
- value.
+ Attribute IDs which should be used in this definition.
+ It is preferred to provide these using the dependencies.
</documentation>
</annotation>
</element>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list