Skip to content

Commit fdb28c0

Browse files
committed
More string comparison fixes
1 parent d0feea5 commit fdb28c0

34 files changed

+58
-22
lines changed

python/core/geometry/qgsabstractgeometryv2.sip

+5
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ class QgsAbstractGeometryV2
114114
*/
115115
QgsWKBTypes::Type wkbType() const;
116116

117+
/** Returns the flat WKB type of the geometry class. Corresponds to information obtained from
118+
* geometryType().
119+
*/
120+
virtual QgsWKBTypes::Type flatWkbType() const = 0;
121+
117122
/** Returns the WKT type string of the geometry.
118123
* @see geometryType
119124
* @see wkbType

python/core/geometry/qgscircularstringv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class QgsCircularStringV2: public QgsCurveV2
1212
virtual bool operator!=( const QgsCurveV2& other ) const;
1313

1414
virtual QString geometryType() const;
15+
virtual QgsWKBTypes::Type flatWkbType() const;
1516
virtual int dimension() const;
1617
virtual QgsCircularStringV2* clone() const;
1718
virtual void clear();

python/core/geometry/qgscompoundcurvev2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class QgsCompoundCurveV2: public QgsCurveV2
1414
virtual bool operator!=( const QgsCurveV2& other ) const;
1515

1616
virtual QString geometryType() const;
17+
virtual QgsWKBTypes::Type flatWkbType() const;
1718
virtual int dimension() const;
1819
virtual QgsCompoundCurveV2* clone() const;
1920
virtual void clear();

python/core/geometry/qgscurvepolygonv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class QgsCurvePolygonV2: public QgsSurfaceV2
1111
~QgsCurvePolygonV2();
1212

1313
virtual QString geometryType() const;
14+
virtual QgsWKBTypes::Type flatWkbType() const;
1415
virtual int dimension() const;
1516
virtual QgsCurvePolygonV2* clone() const;
1617
void clear();

python/core/geometry/qgsgeometrycollectionv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class QgsGeometryCollectionV2: public QgsAbstractGeometryV2
2929
//methods inherited from QgsAbstractGeometry
3030
virtual int dimension() const;
3131
virtual QString geometryType() const;
32+
virtual QgsWKBTypes::Type flatWkbType() const;
3233
virtual void clear();
3334

3435
/** Adds a geometry and takes ownership. Returns true in case of success.*/

python/core/geometry/qgslinestringv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class QgsLineStringV2: public QgsCurveV2
113113
//reimplemented methods
114114

115115
virtual QString geometryType() const;
116+
virtual QgsWKBTypes::Type flatWkbType() const;
116117
virtual int dimension() const;
117118
virtual QgsLineStringV2* clone() const /Factory/;
118119
virtual void clear();

python/core/geometry/qgsmulticurvev2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class QgsMultiCurveV2: public QgsGeometryCollectionV2
66

77
public:
88
virtual QString geometryType() const;
9+
virtual QgsWKBTypes::Type flatWkbType() const;
910
virtual QgsMultiCurveV2* clone() const;
1011

1112
bool fromWkt( const QString& wkt );

python/core/geometry/qgsmultilinestringv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class QgsMultiLineStringV2: public QgsMultiCurveV2
66

77
public:
88
virtual QString geometryType() const;
9+
virtual QgsWKBTypes::Type flatWkbType() const;
910
virtual QgsMultiLineStringV2* clone() const;
1011

1112
bool fromWkt( const QString& wkt );

python/core/geometry/qgsmultipointv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class QgsMultiPointV2: public QgsGeometryCollectionV2
55
%End
66
public:
77
virtual QString geometryType() const;
8+
virtual QgsWKBTypes::Type flatWkbType() const;
89
virtual QgsMultiPointV2* clone() const;
910

1011
bool fromWkt( const QString& wkt );

python/core/geometry/qgsmultipolygonv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class QgsMultiPolygonV2: public QgsMultiSurfaceV2
55
%End
66
public:
77
virtual QString geometryType() const;
8+
virtual QgsWKBTypes::Type flatWkbType() const;
89
virtual QgsMultiPolygonV2* clone() const;
910

1011
bool fromWkt( const QString& wkt );

python/core/geometry/qgsmultisurfacev2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class QgsMultiSurfaceV2: public QgsGeometryCollectionV2
55
%End
66
public:
77
virtual QString geometryType() const;
8+
virtual QgsWKBTypes::Type flatWkbType() const;
89
virtual QgsMultiSurfaceV2* clone() const;
910

1011
bool fromWkt( const QString& wkt );

python/core/geometry/qgspointv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ class QgsPointV2: public QgsAbstractGeometryV2
141141
//implementation of inherited methods
142142
virtual QgsRectangle boundingBox() const;
143143
virtual QString geometryType() const;
144+
virtual QgsWKBTypes::Type flatWkbType() const;
144145
virtual int dimension() const;
145146
virtual QgsPointV2* clone() const /Factory/;
146147
void clear();

python/core/geometry/qgspolygonv2.sip

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class QgsPolygonV2: public QgsCurvePolygonV2
1111
bool operator!=( const QgsPolygonV2& other ) const;
1212

1313
virtual QString geometryType() const;
14+
virtual QgsWKBTypes::Type flatWkbType() const;
1415
virtual QgsPolygonV2* clone() const;
1516

1617
virtual bool fromWkb( QgsConstWkbPtr wkb );

src/core/geometry/qgsabstractgeometryv2.h

+7-2
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,23 @@ class CORE_EXPORT QgsAbstractGeometryV2
7575
virtual int dimension() const = 0;
7676
//virtual int coordDim() const { return mCoordDimension; }
7777

78-
/** Returns a unique string representing the geometry type.
78+
/** Returns a unique string representing the geometry class type.
7979
* @see wkbType
8080
* @see wktTypeStr
8181
*/
8282
virtual QString geometryType() const = 0;
8383

84-
/** Returns the WKB type of the geometry.
84+
/** Returns the WKB type of the saved geometry.
8585
* @see geometryType
8686
* @see wktTypeStr
8787
*/
8888
QgsWKBTypes::Type wkbType() const { return mWkbType; }
8989

90+
/** Returns the flat WKB type of the geometry class. Corresponds to information obtained from
91+
* geometryType().
92+
*/
93+
virtual QgsWKBTypes::Type flatWkbType() const = 0;
94+
9095
/** Returns the WKT type string of the geometry.
9196
* @see geometryType
9297
* @see wkbType

src/core/geometry/qgscircularstringv2.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ bool QgsCircularStringV2::fromWkt( const QString& wkt )
252252

253253
QPair<QgsWKBTypes::Type, QString> parts = QgsGeometryUtils::wktReadBlock( wkt );
254254

255-
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::parseType( geometryType() ) )
255+
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::CircularString )
256256
return false;
257257
mWkbType = parts.first;
258258

src/core/geometry/qgscircularstringv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class CORE_EXPORT QgsCircularStringV2: public QgsCurveV2
3737
virtual bool operator!=( const QgsCurveV2& other ) const override;
3838

3939
virtual QString geometryType() const override { return "CircularString"; }
40+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::CircularString; }
4041
virtual int dimension() const override { return 1; }
4142
virtual QgsCircularStringV2* clone() const override;
4243
virtual void clear() override;

src/core/geometry/qgscompoundcurvev2.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ bool QgsCompoundCurveV2::fromWkt( const QString& wkt )
149149

150150
QPair<QgsWKBTypes::Type, QString> parts = QgsGeometryUtils::wktReadBlock( wkt );
151151

152-
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::parseType( geometryType() ) )
152+
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::CompoundCurve )
153153
return false;
154154
mWkbType = parts.first;
155155

@@ -430,7 +430,7 @@ void QgsCompoundCurveV2::addVertex( const QgsPointV2& pt )
430430
}
431431

432432
QgsLineStringV2* line = nullptr;
433-
if ( !lastCurve || lastCurve->geometryType() != "LineString" )
433+
if ( !lastCurve || QgsWKBTypes::flatType( lastCurve->wkbType() ) != QgsWKBTypes::LineString )
434434
{
435435
line = new QgsLineStringV2();
436436
mCurves.append( line );

src/core/geometry/qgscompoundcurvev2.h

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class CORE_EXPORT QgsCompoundCurveV2: public QgsCurveV2
3838
virtual bool operator!=( const QgsCurveV2& other ) const override;
3939

4040
virtual QString geometryType() const override { return "CompoundCurve"; }
41+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::CompoundCurve; }
4142
virtual int dimension() const override { return 1; }
4243
virtual QgsCompoundCurveV2* clone() const override;
4344
virtual void clear() override;

src/core/geometry/qgscurvepolygonv2.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ bool QgsCurvePolygonV2::fromWkt( const QString& wkt )
149149

150150
QPair<QgsWKBTypes::Type, QString> parts = QgsGeometryUtils::wktReadBlock( wkt );
151151

152-
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::parseType( geometryType() ) )
152+
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::Polygon )
153153
return false;
154154

155155
mWkbType = parts.first;
@@ -466,11 +466,11 @@ void QgsCurvePolygonV2::setExteriorRing( QgsCurveV2* ring )
466466
mExteriorRing = ring;
467467

468468
//set proper wkb type
469-
if ( geometryType() == "Polygon" )
469+
if ( QgsWKBTypes::flatType( wkbType() ) == QgsWKBTypes::Polygon )
470470
{
471471
setZMTypeFromSubGeometry( ring, QgsWKBTypes::Polygon );
472472
}
473-
else if ( geometryType() == "CurvePolygon" )
473+
else if ( QgsWKBTypes::flatType( wkbType() ) == QgsWKBTypes::CurvePolygon )
474474
{
475475
setZMTypeFromSubGeometry( ring, QgsWKBTypes::CurvePolygon );
476476
}

src/core/geometry/qgscurvepolygonv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class CORE_EXPORT QgsCurvePolygonV2: public QgsSurfaceV2
3737
~QgsCurvePolygonV2();
3838

3939
virtual QString geometryType() const override { return "CurvePolygon"; }
40+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::CurvePolygon; }
4041
virtual int dimension() const override { return 2; }
4142
virtual QgsCurvePolygonV2* clone() const override;
4243
void clear() override;

src/core/geometry/qgsgeometry.cpp

+7-6
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ bool QgsGeometry::deleteVertex( int atVertex )
449449
}
450450

451451
//maintain compatibility with < 2.10 API
452-
if ( d->geometry->geometryType() == "MultiPoint" )
452+
if ( QgsWKBTypes::flatType( d->geometry->wkbType() ) == QgsWKBTypes::MultiPoint )
453453
{
454454
detach( true );
455455
removeWkbGeos();
@@ -487,7 +487,7 @@ bool QgsGeometry::insertVertex( double x, double y, int beforeVertex )
487487
}
488488

489489
//maintain compatibility with < 2.10 API
490-
if ( d->geometry->geometryType() == "MultiPoint" )
490+
if ( QgsWKBTypes::flatType( d->geometry->wkbType() ) == QgsWKBTypes::MultiPoint )
491491
{
492492
detach( true );
493493
removeWkbGeos();
@@ -1008,7 +1008,7 @@ bool QgsGeometry::convertToSingleType()
10081008

10091009
QgsPoint QgsGeometry::asPoint() const
10101010
{
1011-
if ( !d->geometry || d->geometry->geometryType() != "Point" )
1011+
if ( !d->geometry || QgsWKBTypes::flatType( d->geometry->wkbType() ) != QgsWKBTypes::Point )
10121012
{
10131013
return QgsPoint();
10141014
}
@@ -1029,7 +1029,8 @@ QgsPolyline QgsGeometry::asPolyline() const
10291029
return polyLine;
10301030
}
10311031

1032-
bool doSegmentation = ( d->geometry->geometryType() == "CompoundCurve" || d->geometry->geometryType() == "CircularString" );
1032+
bool doSegmentation = ( QgsWKBTypes::flatType( d->geometry->wkbType() ) == QgsWKBTypes::CompoundCurve
1033+
|| QgsWKBTypes::flatType( d->geometry->wkbType() ) == QgsWKBTypes::CircularString );
10331034
QgsLineStringV2* line = nullptr;
10341035
if ( doSegmentation )
10351036
{
@@ -1071,7 +1072,7 @@ QgsPolygon QgsGeometry::asPolygon() const
10711072
if ( !d->geometry )
10721073
return QgsPolygon();
10731074

1074-
bool doSegmentation = ( d->geometry->geometryType() == "CurvePolygon" );
1075+
bool doSegmentation = ( QgsWKBTypes::flatType( d->geometry->wkbType() ) == QgsWKBTypes::CurvePolygon );
10751076

10761077
QgsPolygonV2* p = nullptr;
10771078
if ( doSegmentation )
@@ -1105,7 +1106,7 @@ QgsPolygon QgsGeometry::asPolygon() const
11051106

11061107
QgsMultiPoint QgsGeometry::asMultiPoint() const
11071108
{
1108-
if ( !d->geometry || d->geometry->geometryType() != "MultiPoint" )
1109+
if ( !d->geometry || QgsWKBTypes::flatType( d->geometry->wkbType() ) != QgsWKBTypes::MultiPoint )
11091110
{
11101111
return QgsMultiPoint();
11111112
}

src/core/geometry/qgsgeometrycollectionv2.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ bool QgsGeometryCollectionV2::fromCollectionWkt( const QString &wkt, const QList
491491

492492
QPair<QgsWKBTypes::Type, QString> parts = QgsGeometryUtils::wktReadBlock( wkt );
493493

494-
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::parseType( geometryType() ) )
494+
if ( QgsWKBTypes::flatType( parts.first ) != flatWkbType() )
495495
return false;
496496
mWkbType = parts.first;
497497

@@ -504,7 +504,7 @@ bool QgsGeometryCollectionV2::fromCollectionWkt( const QString &wkt, const QList
504504
bool success = false;
505505
Q_FOREACH ( const QgsAbstractGeometryV2* geom, subtypes )
506506
{
507-
if ( QgsWKBTypes::flatType( childParts.first ) == QgsWKBTypes::parseType( geom->geometryType() ) )
507+
if ( QgsWKBTypes::flatType( childParts.first ) == geom->flatWkbType() )
508508
{
509509
mGeometries.append( geom->clone() );
510510
if ( mGeometries.back()->fromWkt( childWkt ) )

src/core/geometry/qgsgeometrycollectionv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class CORE_EXPORT QgsGeometryCollectionV2: public QgsAbstractGeometryV2
5353
//methods inherited from QgsAbstractGeometry
5454
virtual int dimension() const override;
5555
virtual QString geometryType() const override { return "GeometryCollection"; }
56+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::GeometryCollection; }
5657
virtual void clear() override;
5758

5859
/** Adds a geometry and takes ownership. Returns true in case of success.*/

src/core/geometry/qgsgeometryeditutils.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,14 @@ int QgsGeometryEditUtils::addPart( QgsAbstractGeometryV2* geom, QgsAbstractGeome
120120
}
121121

122122
bool added = false;
123-
if ( geom->geometryType() == "MultiSurface" || geom->geometryType() == "MultiPolygon" )
123+
if ( QgsWKBTypes::flatType( geom->wkbType() ) == QgsWKBTypes::MultiSurface
124+
|| QgsWKBTypes::flatType( geom->wkbType() ) == QgsWKBTypes::MultiPolygon )
124125
{
125126
QgsCurveV2* curve = dynamic_cast<QgsCurveV2*>( part );
126127
if ( curve && curve->isClosed() && curve->numPoints() >= 4 )
127128
{
128129
QgsCurvePolygonV2 *poly = nullptr;
129-
if ( curve->geometryType() == "LineString" )
130+
if ( QgsWKBTypes::flatType( curve->wkbType() ) == QgsWKBTypes::LineString )
130131
{
131132
poly = new QgsPolygonV2();
132133
}
@@ -137,11 +138,11 @@ int QgsGeometryEditUtils::addPart( QgsAbstractGeometryV2* geom, QgsAbstractGeome
137138
poly->setExteriorRing( curve );
138139
added = geomCollection->addGeometry( poly );
139140
}
140-
else if ( part->geometryType() == "Polygon" )
141+
else if ( QgsWKBTypes::flatType( part->wkbType() ) == QgsWKBTypes::Polygon )
141142
{
142143
added = geomCollection->addGeometry( part );
143144
}
144-
else if ( part->geometryType() == "MultiPolygon" )
145+
else if ( QgsWKBTypes::flatType( part->wkbType() ) == QgsWKBTypes::MultiPolygon )
145146
{
146147
QgsGeometryCollectionV2 *parts = static_cast<QgsGeometryCollectionV2*>( part );
147148

src/core/geometry/qgslinestringv2.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ bool QgsLineStringV2::fromWkt( const QString& wkt )
150150

151151
QPair<QgsWKBTypes::Type, QString> parts = QgsGeometryUtils::wktReadBlock( wkt );
152152

153-
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::parseType( geometryType() ) )
153+
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::LineString )
154154
return false;
155155
mWkbType = parts.first;
156156

src/core/geometry/qgslinestringv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ class CORE_EXPORT QgsLineStringV2: public QgsCurveV2
139139
//reimplemented methods
140140

141141
virtual QString geometryType() const override { return "LineString"; }
142+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::LineString; }
142143
virtual int dimension() const override { return 1; }
143144
virtual QgsLineStringV2* clone() const override;
144145
virtual void clear() override;

src/core/geometry/qgsmulticurvev2.h

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CORE_EXPORT QgsMultiCurveV2: public QgsGeometryCollectionV2
2828
{
2929
public:
3030
virtual QString geometryType() const override { return "MultiCurve"; }
31+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::MultiCurve; }
3132
QgsMultiCurveV2* clone() const override;
3233

3334
bool fromWkt( const QString& wkt ) override;

src/core/geometry/qgsmultilinestringv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CORE_EXPORT QgsMultiLineStringV2: public QgsMultiCurveV2
2828
{
2929
public:
3030
virtual QString geometryType() const override { return "MultiLineString"; }
31+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::MultiLineString; }
3132
QgsMultiLineStringV2* clone() const override;
3233

3334
bool fromWkt( const QString& wkt ) override;

src/core/geometry/qgsmultipointv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CORE_EXPORT QgsMultiPointV2: public QgsGeometryCollectionV2
2828
{
2929
public:
3030
virtual QString geometryType() const override { return "MultiPoint"; }
31+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::MultiPoint; }
3132
QgsMultiPointV2* clone() const override;
3233

3334
bool fromWkt( const QString& wkt ) override;

src/core/geometry/qgsmultipolygonv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CORE_EXPORT QgsMultiPolygonV2: public QgsMultiSurfaceV2
2828
{
2929
public:
3030
virtual QString geometryType() const override { return "MultiPolygon"; }
31+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::MultiPolygon; }
3132
QgsMultiPolygonV2* clone() const override;
3233

3334
bool fromWkt( const QString& wkt ) override;

src/core/geometry/qgsmultisurfacev2.h

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CORE_EXPORT QgsMultiSurfaceV2: public QgsGeometryCollectionV2
2828
{
2929
public:
3030
virtual QString geometryType() const override { return "MultiSurface"; }
31+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::MultiSurface; }
3132
QgsMultiSurfaceV2* clone() const override;
3233

3334
bool fromWkt( const QString& wkt ) override;

src/core/geometry/qgspointv2.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ bool QgsPointV2::fromWkt( const QString& wkt )
130130

131131
QPair<QgsWKBTypes::Type, QString> parts = QgsGeometryUtils::wktReadBlock( wkt );
132132

133-
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::parseType( geometryType() ) )
133+
if ( QgsWKBTypes::flatType( parts.first ) != QgsWKBTypes::Point )
134134
return false;
135135
mWkbType = parts.first;
136136

src/core/geometry/qgspointv2.h

+1
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ class CORE_EXPORT QgsPointV2: public QgsAbstractGeometryV2
153153
//implementation of inherited methods
154154
virtual QgsRectangle boundingBox() const override { return QgsRectangle( mX, mY, mX, mY ); }
155155
virtual QString geometryType() const override { return "Point"; }
156+
virtual QgsWKBTypes::Type flatWkbType() const override { return QgsWKBTypes::Point; }
156157
virtual int dimension() const override { return 0; }
157158
virtual QgsPointV2* clone() const override;
158159
void clear() override;

0 commit comments

Comments
 (0)