Skip to content

Commit af52fdd

Browse files
committed
start
Clean logging test Cleanup fix translate
1 parent 28eeb09 commit af52fdd

22 files changed

+2259
-1
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Globalization;
7+
using NuGet.Common;
8+
9+
namespace NuGet.CommandLine.XPlat.Commands.PackageDownload;
10+
11+
internal class PackageDownloadArgs
12+
{
13+
public PackageDownloadArgs(string packageId, IList<string> sources, string outputDirectory, ILogger logger)
14+
{
15+
PackageId = packageId;
16+
Sources = sources;
17+
OutputDirectory = outputDirectory;
18+
Logger = logger;
19+
}
20+
21+
public string PackageId { get; set; }
22+
public string Version { get; set; }
23+
public IList<string> Sources { get; set; }
24+
public string OutputDirectory { get; set; }
25+
public string ConfigFile { get; set; }
26+
27+
public bool IncludePrerelease { get; set; }
28+
public bool DownloadOnly { get; set; }
29+
public bool AllowInsecureConnections { get; set; }
30+
public bool Interactive { get; set; }
31+
32+
private Verbosity _verbosity = Verbosity.Normal;
33+
public Verbosity Verbosity
34+
{
35+
get => _verbosity;
36+
set => _verbosity = value;
37+
}
38+
39+
public ILogger Logger { get; set; }
40+
41+
public void SetVerbosity(string level)
42+
{
43+
if (string.IsNullOrWhiteSpace(level))
44+
{
45+
_verbosity = Verbosity.Normal;
46+
return;
47+
}
48+
49+
switch (level.Trim().ToLowerInvariant())
50+
{
51+
case "quiet":
52+
_verbosity = Verbosity.Quiet;
53+
break;
54+
case "normal":
55+
_verbosity = Verbosity.Normal;
56+
break;
57+
case "detailed":
58+
_verbosity = Verbosity.Detailed;
59+
break;
60+
default:
61+
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Strings.Error_InvalidVerbosity, level));
62+
}
63+
}
64+
}
65+
66+
internal enum Verbosity { Quiet, Normal, Detailed }
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using System.CommandLine;
7+
using System.CommandLine.Help;
8+
using NuGet.CommandLine.XPlat.Commands;
9+
using NuGet.CommandLine.XPlat.Commands.PackageDownload;
10+
11+
namespace NuGet.CommandLine.XPlat
12+
{
13+
internal class PackageDownloadCommand
14+
{
15+
public static void Register(Command rootCommand, Func<ILoggerWithColor> getLogger)
16+
{
17+
var downloadCommand = new DocumentedCommand(
18+
"download",
19+
Strings.pkgDownload_descritpion,
20+
"https://aka.ms/dotnet/package/download");
21+
22+
// Arguments
23+
var packageId = new Argument<string>("PackageId")
24+
{
25+
Description = Strings.pkgDownload_packageIdDescription,
26+
Arity = ArgumentArity.ExactlyOne,
27+
};
28+
29+
// Options
30+
var allowInsecureConnections = new Option<bool>("--allow-insecure-connections")
31+
{
32+
Description = Strings.pkgDownload_AllowInsecureConnectionsDescritption,
33+
Arity = ArgumentArity.Zero
34+
};
35+
36+
var configFile = new Option<string>("--configfile")
37+
{
38+
Description = Strings.pkgDownload_configFileDesciption,
39+
Arity = ArgumentArity.ExactlyOne
40+
};
41+
42+
var downloadOnly = new Option<bool>("--download-only")
43+
{
44+
Description = Strings.pkgDownload_downloadOnlyDeciption,
45+
Arity = ArgumentArity.Zero
46+
};
47+
48+
var help = new HelpOption()
49+
{
50+
Arity = ArgumentArity.Zero
51+
};
52+
53+
var interactive = new Option<bool>("--interactive")
54+
{
55+
Description = Strings.pkgDownload_interactiveDecription,
56+
Arity = ArgumentArity.Zero
57+
};
58+
59+
var outputDirectory = new Option<string>("--output-directory")
60+
{
61+
Description = Strings.pkgDownload_OutputDirectoryDescription,
62+
Arity = ArgumentArity.ExactlyOne
63+
};
64+
65+
var prerelease = new Option<bool>("--prerelease")
66+
{
67+
Description = Strings.pkgDownload_prereleaseDescription,
68+
Arity = ArgumentArity.Zero
69+
};
70+
71+
var sources = new Option<List<string>>("--source")
72+
{
73+
Description = Strings.pkgDownload_sourcesDescription,
74+
Arity = ArgumentArity.OneOrMore
75+
};
76+
77+
var verbosity = new Option<string>("--verbosity")
78+
{
79+
Description = Strings.pkgDownload_verbosityDescription,
80+
Arity = ArgumentArity.ExactlyOne
81+
};
82+
83+
var version = new Option<string>("--version")
84+
{
85+
Description = Strings.pkgDownload_versionDescription,
86+
Arity = ArgumentArity.ExactlyOne
87+
};
88+
89+
90+
downloadCommand.Arguments.Add(packageId);
91+
downloadCommand.Options.Add(allowInsecureConnections);
92+
downloadCommand.Options.Add(configFile);
93+
downloadCommand.Options.Add(downloadOnly);
94+
downloadCommand.Options.Add(help);
95+
downloadCommand.Options.Add(interactive);
96+
downloadCommand.Options.Add(outputDirectory);
97+
downloadCommand.Options.Add(prerelease);
98+
downloadCommand.Options.Add(sources);
99+
downloadCommand.Options.Add(verbosity);
100+
downloadCommand.Options.Add(version);
101+
102+
downloadCommand.SetAction(async (parserResult, cancellationToken) =>
103+
{
104+
ILoggerWithColor logger = getLogger();
105+
106+
try
107+
{
108+
var args = new PackageDownloadArgs(parserResult.GetValue(packageId), parserResult.GetValue(sources), parserResult.GetValue(outputDirectory), logger)
109+
{
110+
Version = parserResult.GetValue(version),
111+
IncludePrerelease = parserResult.GetValue(prerelease),
112+
DownloadOnly = parserResult.GetValue(downloadOnly),
113+
AllowInsecureConnections = parserResult.GetValue(allowInsecureConnections),
114+
Interactive = parserResult.GetValue(interactive),
115+
ConfigFile = parserResult.GetValue(configFile)
116+
};
117+
118+
args.SetVerbosity(parserResult.GetValue(verbosity));
119+
120+
return await PackageDownloadRunner.RunAsync(args, cancellationToken);
121+
}
122+
catch (ArgumentException ex)
123+
{
124+
logger.LogError(ex.Message);
125+
return ExitCodes.InvalidArguments;
126+
}
127+
});
128+
129+
rootCommand.Subcommands.Add(downloadCommand);
130+
}
131+
}
132+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Threading.Tasks;
6+
using NuGet.Common;
7+
8+
namespace NuGet.CommandLine.XPlat.Commands.PackageDownload
9+
{
10+
internal sealed class PackageDownloadLogger : ILogger
11+
{
12+
private readonly ILogger _primary;
13+
private readonly Verbosity _verbosity;
14+
15+
public PackageDownloadLogger(
16+
ILogger primary,
17+
Verbosity verbosity)
18+
{
19+
_primary = primary ?? throw new ArgumentNullException(nameof(primary));
20+
_verbosity = verbosity;
21+
}
22+
23+
public void LogDebug(string data)
24+
{
25+
if (_verbosity == Verbosity.Detailed)
26+
{
27+
_primary.LogDebug(data);
28+
}
29+
}
30+
public void LogVerbose(string data)
31+
{
32+
if (_verbosity == Verbosity.Detailed)
33+
{
34+
_primary.LogVerbose(data);
35+
}
36+
}
37+
public void LogInformation(string data)
38+
{
39+
if (_verbosity == Verbosity.Detailed)
40+
{
41+
_primary.LogInformation(data);
42+
}
43+
}
44+
public void LogMinimal(string data)
45+
{
46+
if (_verbosity != Verbosity.Quiet)
47+
{
48+
_primary.LogMinimal(data);
49+
}
50+
}
51+
public void LogWarning(string data)
52+
{
53+
if (_verbosity != Verbosity.Quiet)
54+
{
55+
_primary.LogWarning(data);
56+
}
57+
}
58+
public void LogError(string data)
59+
{
60+
_primary.LogError(data);
61+
}
62+
63+
public void LogInformationSummary(string data)
64+
{
65+
if (_verbosity == Verbosity.Detailed)
66+
{
67+
_primary.LogInformationSummary(data);
68+
}
69+
}
70+
71+
public void Log(LogLevel level, string data)
72+
{
73+
if (_verbosity == Verbosity.Quiet)
74+
{
75+
if (level == LogLevel.Error)
76+
{
77+
_primary.Log(level, data);
78+
}
79+
}
80+
else if (_verbosity == Verbosity.Normal)
81+
{
82+
if (level == LogLevel.Error
83+
|| level == LogLevel.Warning
84+
|| level == LogLevel.Minimal
85+
|| level == LogLevel.Information)
86+
{
87+
_primary.Log(level, data);
88+
}
89+
}
90+
else
91+
{
92+
_primary.Log(level, data);
93+
}
94+
}
95+
public Task LogAsync(LogLevel level, string data)
96+
{
97+
if (_verbosity == Verbosity.Quiet)
98+
{
99+
if (level == LogLevel.Error)
100+
{
101+
return _primary.LogAsync(level, data);
102+
}
103+
104+
return Task.CompletedTask;
105+
}
106+
else if (_verbosity == Verbosity.Normal)
107+
{
108+
if (level == LogLevel.Error
109+
|| level == LogLevel.Warning
110+
|| level == LogLevel.Minimal
111+
|| level == LogLevel.Information)
112+
{
113+
return _primary.LogAsync(level, data);
114+
}
115+
116+
return Task.CompletedTask;
117+
}
118+
else
119+
{
120+
return _primary.LogAsync(level, data);
121+
}
122+
}
123+
124+
public void Log(ILogMessage message)
125+
{
126+
Log(message.Level, message.Message);
127+
}
128+
129+
public Task LogAsync(ILogMessage message)
130+
{
131+
return LogAsync(message.Level, message.Message);
132+
}
133+
}
134+
}
135+

0 commit comments

Comments
 (0)