Skip to content

Commit

Permalink
Migrate to .net6
Browse files Browse the repository at this point in the history
  • Loading branch information
webprofusion-chrisc committed Nov 10, 2021
1 parent 314d9aa commit d954ec1
Show file tree
Hide file tree
Showing 30 changed files with 72 additions and 55 deletions.
4 changes: 2 additions & 2 deletions API/OCM.Net/OCM.API.Client/OCM.API.Client.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ProductVersion>8.0.30703</ProductVersion>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\..\</SolutionDir>
<AssemblyTitle>OCM.API.Client</AssemblyTitle>
<Product>OCM.API.Client</Product>
Expand Down Expand Up @@ -43,7 +43,7 @@
</PropertyGroup>
<Import Project="..\..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>

Expand Down
29 changes: 15 additions & 14 deletions API/OCM.Net/OCM.API.Core/Data/OCMEntities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,11 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseLoggerFactory(ConsoleLogger);
optionsBuilder.UseLazyLoadingProxies();

optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["OCMEntities"].ConnectionString, x =>
optionsBuilder.UseSqlServer(System.Configuration.ConfigurationManager.ConnectionStrings["OCMEntities"].ConnectionString, x =>
{
x.UseNetTopologySuite();
x.CommandTimeout((int)TimeSpan.FromMinutes(5).TotalSeconds);
x.EnableRetryOnFailure(3);

});

Expand All @@ -83,13 +84,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.ToTable("AddressInfo");

entity.HasIndex(e => e.SpatialPosition)
.HasName("IX_AddresLocationSpatial");
.HasDatabaseName("IX_AddresLocationSpatial");

entity.HasIndex(e => new { e.Id, e.CountryId })
.HasName("IX_AddressInfo_CountryID>");
.HasDatabaseName("IX_AddressInfo_CountryID>");

entity.HasIndex(e => new { e.Latitude, e.Longitude })
.HasName("IX_AddressLocation");
.HasDatabaseName("IX_AddressLocation");

entity.Property(e => e.Id).HasColumnName("ID");

Expand Down Expand Up @@ -133,7 +134,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.ToTable("AuditLog");

entity.HasIndex(e => e.UserId)
.HasName("NonClusteredIndex-20191009-155512");
.HasDatabaseName("NonClusteredIndex-20191009-155512");

entity.Property(e => e.Id).HasColumnName("ID");

Expand All @@ -155,14 +156,14 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.HasIndex(e => e.DateLastStatusUpdate);

entity.HasIndex(e => e.ParentChargePointId)
.HasName("IX_ChargePoint_ParentID");
.HasDatabaseName("IX_ChargePoint_ParentID");

entity.HasIndex(e => e.Uuid)
.HasName("IX_ChargePoint")
.HasDatabaseName("IX_ChargePoint")
.IsUnique();

entity.HasIndex(e => new { e.Id, e.AddressInfoId })
.HasName("IX_ChargePointAddressID");
.HasDatabaseName("IX_ChargePointAddressID");

entity.Property(e => e.Id).HasColumnName("ID");

Expand Down Expand Up @@ -280,7 +281,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.HasComment("List of equipment types and specifications for a given POI");

entity.HasIndex(e => e.ChargePointId)
.HasName("IX_ConnectionInfoChargePoint")
.HasDatabaseName("IX_ConnectionInfoChargePoint")
.IsClustered();

entity.Property(e => e.Id).HasColumnName("ID");
Expand Down Expand Up @@ -332,7 +333,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.ToTable("ConnectionType");

entity.HasIndex(e => e.Id)
.HasName("IX_ConnectionType_Title")
.HasDatabaseName("IX_ConnectionType_Title")
.IsUnique();

entity.Property(e => e.Id).HasColumnName("ID");
Expand Down Expand Up @@ -444,10 +445,10 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.ToTable("EditQueueItem");

entity.HasIndex(e => new { e.IsProcessed, e.DateSubmitted })
.HasName("IX_EditQueueFilters");
.HasDatabaseName("IX_EditQueueFilters");

entity.HasIndex(e => new { e.IsProcessed, e.EntityTypeId, e.UserId, e.EntityId })
.HasName("IX_UserID_EntityID");
.HasDatabaseName("IX_UserID_EntityID");

entity.Property(e => e.Id).HasColumnName("ID");

Expand Down Expand Up @@ -527,7 +528,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.ToTable("MediaItem");

entity.HasIndex(e => e.ChargePointId)
.HasName("IX_MediaItem")
.HasDatabaseName("IX_MediaItem")
.IsClustered();

entity.Property(e => e.Id).HasColumnName("ID");
Expand Down Expand Up @@ -963,7 +964,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
entity.ToTable("UserComment");

entity.HasIndex(e => e.ChargePointId)
.HasName("IX_UserComment_ChargePoint")
.HasDatabaseName("IX_UserComment_ChargePoint")
.IsClustered();

entity.Property(e => e.Id).HasColumnName("ID");
Expand Down
4 changes: 2 additions & 2 deletions API/OCM.Net/OCM.API.Core/OCM.API.Core.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<ApplicationIcon />
<OutputType>Library</OutputType>
<StartupObject />
Expand Down Expand Up @@ -57,7 +57,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="AWSSDK.S3" Version="3.7.3.21" />
<PackageReference Include="AWSSDK.S3" Version="3.7.4" />
<PackageReference Include="Bricelam.EntityFrameworkCore.Pluralizer" Version="1.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
2 changes: 1 addition & 1 deletion API/OCM.Net/OCM.API.Core/Util/CacheManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public async static Task<MirrorStatus> GetCacheStatus(bool includeDupeCheck = fa
{
try
{
return CacheProviderMongoDB.DefaultInstance.GetMirrorStatus(includeDupeCheck, includeDBCheck, includeContentHash);
return await Task.FromResult(CacheProviderMongoDB.DefaultInstance.GetMirrorStatus(includeDupeCheck, includeDBCheck, includeContentHash));
}
catch (Exception)
{
Expand Down
13 changes: 13 additions & 0 deletions API/OCM.Net/OCM.API.Core/Util/CacheProviderMongoDB.cs
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,11 @@ public MirrorStatus GetMirrorStatus(bool includeDupeCheck, bool includeDBCheck =
var statusCollection = database.GetCollection<MirrorStatus>("status");
var currentStatus = statusCollection.FindOne();

if (currentStatus == null)
{
return new MirrorStatus { StatusCode = HttpStatusCode.NotFound, Description = "Cache is offline (not yet generated)" };
}

if (includeContentHash)
{
currentStatus.ContentHash = GetCacheContentHash();
Expand All @@ -783,6 +788,14 @@ public MirrorStatus GetMirrorStatus(bool includeDupeCheck, bool includeDBCheck =
currentStatus.MaxPOIId = db.ChargePoints.Max(i => i.Id);
}
}
else
{
var poiCollection = database.GetCollection<POIMongoDB>("poi");
currentStatus.TotalPOIInDB = poiCollection.Count();
currentStatus.LastPOIUpdate = poiCollection.AsQueryable().Max(p => p.DateLastStatusUpdate);
currentStatus.LastPOICreated = poiCollection.AsQueryable().Max(p => p.DateCreated);
currentStatus.MaxPOIId = poiCollection.AsQueryable().Max(p => p.ID);
}

if (includeDupeCheck)
{
Expand Down
4 changes: 2 additions & 2 deletions API/OCM.Net/OCM.API.Model/Extended/SystemInfoResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ namespace OCM.API.Common.Model
public class SystemInfoResult
{
public string SystemVersion { get; set; }
public DateTime POIDataLastModified { get; set; }
public DateTime POIDataLastCreated { get; set; }
public DateTime? POIDataLastModified { get; set; }
public DateTime? POIDataLastCreated { get; set; }
public int? MaxPOIId { get; set; }
public string DataHash { get; set; }
}
Expand Down
2 changes: 1 addition & 1 deletion API/OCM.Net/OCM.API.Model/OCM.API.Common.Model.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<ProductVersion>8.0.30703</ProductVersion>
<ProjectGuid>{F330ECA1-D079-4EE0-AEB4-30A3FD67FE03}</ProjectGuid>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\..\</SolutionDir>
<AssemblyTitle>OCM.API.Model</AssemblyTitle>
<Company>http://openchargemap.org</Company>
Expand Down
6 changes: 3 additions & 3 deletions API/OCM.Net/OCM.API.Web/Controllers/SystemController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ public SystemController(ILogger<SystemController> logger)
[Route("/v3/system/status")]
public async Task<SystemInfoResult> GetStatus()
{
var cacheStatus = await Core.Data.CacheManager.GetCacheStatus(false, true, true);
var cacheStatus = await Core.Data.CacheManager.GetCacheStatus(false, false, true);

return
new SystemInfoResult
{
SystemVersion = "3",
POIDataLastModified = cacheStatus.LastPOIUpdate.Value,
POIDataLastCreated = cacheStatus.LastPOICreated.Value,
POIDataLastModified = cacheStatus.LastPOIUpdate.GetValueOrDefault(),
POIDataLastCreated = cacheStatus.LastPOICreated.GetValueOrDefault(),
MaxPOIId = cacheStatus.MaxPOIId,
DataHash = cacheStatus.ContentHash
};
Expand Down
6 changes: 3 additions & 3 deletions API/OCM.Net/OCM.API.Web/OCM.API.Web.csproj
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<UserSecretsId>407b1e1a-5108-48b6-bb48-4990a0804269</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Ben.BlockingDetector" Version="0.0.4" />
<PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.2.0" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.14.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.14.0" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.14.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.14.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OCM.API.Core\OCM.API.Core.csproj" />
Expand Down
4 changes: 3 additions & 1 deletion API/OCM.Net/OCM.API.Web/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ public void ConfigureServices(IServiceCollection services)
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
#if DEBUG
app.UseBlockingDetection();

#endif

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
Expand Down
2 changes: 1 addition & 1 deletion API/OCM.Net/OCM.API.Web/web.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="C:\Work\GIT\ocm-system\API\OCM.Net\OCM.API.Web\bin\Debug\net5.0\OCM.API.Web.exe" arguments="" stdoutLogEnabled="true" hostingModel="inprocess">
<aspNetCore processPath="C:\Work\GIT\ocm-system\API\OCM.Net\OCM.API.Web\bin\Debug\net6.0\OCM.API.Web.exe" arguments="" stdoutLogEnabled="true" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
Expand Down
4 changes: 2 additions & 2 deletions API/OCM.Net/OCM.API.Worker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["API/OCM.Net/OCM.API.Worker/OCM.API.Worker.csproj", "API/OCM.Net/OCM.API.Worker/"]
RUN dotnet restore "API/OCM.Net/OCM.API.Worker/OCM.API.Worker.csproj"
Expand Down
2 changes: 1 addition & 1 deletion API/OCM.Net/OCM.API.Worker/OCM.API.Worker.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<UserSecretsId>22dd266a-d0c7-4802-a609-26bd7bda47e9</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
Expand Down
2 changes: 1 addition & 1 deletion API/OCM.Net/OCM.API.Worker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ To build and deploy the API service worker as systemd managed service:
cd ~/ocm-system/API/OCM.Net/OCM.API.Worker
dotnet publish -c Release
sudo mkdir /opt/ocm-api
sudo cp -R bin/Release/net5.0/publish/* /opt/ocm-api
sudo cp -R bin/Release/net6.0/publish/* /opt/ocm-api
```

### Deploying as a service (systemd)
Expand Down
4 changes: 2 additions & 2 deletions Import/OCM.Import.Analysis/OCM.Import.Analysis.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ProjectGuid>{FBD1BB19-0912-4A8C-BE95-197CCDC27CF3}</ProjectGuid>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<AssemblyTitle>OCM.Import.Analysis</AssemblyTitle>
<Product>OCM.Import.Analysis</Product>
<Copyright>Copyright © 2015</Copyright>
Expand Down Expand Up @@ -38,7 +38,7 @@
<PackageReference Include="DotSpatial.Symbology" Version="1.9.0" />
<PackageReference Include="DotSpatial.Symbology.Forms" Version="1.9.0" />
<PackageReference Include="DotSpatial.Topology" Version="1.9.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\API\OCM.Net\OCM.API.Model\OCM.API.Common.Model.csproj" />
Expand Down
2 changes: 1 addition & 1 deletion Import/OCM.Import.Common/OCM.Import.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<ProductVersion>8.0.30703</ProductVersion>
<RootNamespace>OCM.Import</RootNamespace>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<AssemblyTitle>OCM.Import.Common</AssemblyTitle>
<Company>http://openchargemap.org</Company>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<ApplicationIcon />
Expand Down
10 changes: 5 additions & 5 deletions Import/OCM.Import.Manager.UI/AppMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ public AppMain()
this.txtAPIKey_Coulomb.Text = Settings.Default.APIKey_Coulomb;
this.txtAPIPwd_Coulomb.Text = Settings.Default.APIPwd_Coulomb;

this.txtImportJSONPath.Text = ConfigurationManager.AppSettings["ImportBasePath"];
this.txtImportJSONPath.Text = System.Configuration.ConfigurationManager.AppSettings["ImportBasePath"];

var settings = new ImportSettings
{
GeolocationShapefilePath = ConfigurationManager.AppSettings["GeolocationShapefilePath"],
ImportUserAPIKey = ConfigurationManager.AppSettings["APIKey"],
MasterAPIBaseUrl = ConfigurationManager.AppSettings["APIBaseUrl"],
TempFolderPath = ConfigurationManager.AppSettings["ImportBasePath"]
GeolocationShapefilePath = System.Configuration.ConfigurationManager.AppSettings["GeolocationShapefilePath"],
ImportUserAPIKey = System.Configuration.ConfigurationManager.AppSettings["APIKey"],
MasterAPIBaseUrl = System.Configuration.ConfigurationManager.AppSettings["APIBaseUrl"],
TempFolderPath = System.Configuration.ConfigurationManager.AppSettings["ImportBasePath"]
};


Expand Down
2 changes: 1 addition & 1 deletion Import/OCM.Import.Manager.UI/OCM.Import.Manager.UI.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion Import/OCM.Import.Manager.UI/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"addenergie"

],
"GeolocationShapefilePath": "bin/Debug/net5.0/Shapefiles/World",
"GeolocationShapefilePath": "bin/Debug/net6.0/Shapefiles/World",
"TempFolderPath": "/tmp/",
"ApiKeys": {

Expand Down
2 changes: 1 addition & 1 deletion Import/OCM.Import.Worker/OCM.Import.Worker.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<UserSecretsId>dotnet-OCM.Import.Worker-31047500-D9C3-4C39-8E22-3C8E9E9091FF</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>..\..</DockerfileContext>
Expand Down
2 changes: 1 addition & 1 deletion Tests/OCM.API.Tests/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<add key="MongoDB_Database" value="ocm_mirror"/>
</appSettings>
<connectionStrings>
<add name="OCMEntities" connectionString="metadata=res://*/Data.DataModel.csdl|res://*/Data.DataModel.ssdl|res://*/Data.DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(local)\SQLEXPRESS;initial catalog=OCM_Live;integrated security=True;multipleactiveresultsets=True;App=OCM.API.Web&quot;" providerName="System.Data.EntityClient" />
<add name="OCMEntities" connectionString="Server=(local)\sqlexpress;Database=OCM_Live;Trusted_Connection=True;" providerName="System.Data.EntityClient" />
<add name="AzureStorage" connectionString="UseDevelopmentStorage=true;" />
</connectionStrings>

Expand Down
2 changes: 1 addition & 1 deletion Tests/OCM.API.Tests/OCM.API.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>
Expand Down
3 changes: 1 addition & 2 deletions Tests/OCM.API.Tests/POICacheTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ public POICacheTests()
var settings = new Core.Settings.CoreSettings();
config.GetSection("CoreSettings").Bind(settings);
_settings = settings;

var c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
_ = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

Core.Data.CacheManager.InitCaching(_settings);

Expand Down
Loading

0 comments on commit d954ec1

Please sign in to comment.