Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MNG-8494] Restore Maven 3 compatibility #2031

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions api/maven-api-model/src/main/mdo/maven.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -1315,6 +1315,17 @@
]]>
</code>
</codeSegment>
<codeSegment>
<version>4.0.0/4.0.99</version>
<code>
<![CDATA[
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure what CDATA is doing here. It's not needed

public void clearManagementKey() {
managementKey = null;
}
]]>
</code>
</codeSegment>
</codeSegments>
</class>
<class>
Expand Down
4 changes: 4 additions & 0 deletions api/maven-api-settings/src/main/mdo/settings.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,10 @@
}
return profileMap;
}

public void setModelEncoding(String modelEncoding) {
update(getDelegate().with().modelEncoding(modelEncoding).build());
}
]]>
</code>
</codeSegment>
Expand Down
12 changes: 12 additions & 0 deletions api/maven-api-toolchain/src/main/mdo/toolchains.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,18 @@
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>1.0.0/1.1.0</version>
<code>
<![CDATA[
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure what CDATA is doing here. It's not needed

public void setModelEncoding(String modelEncoding) {
update(getDelegate().with().modelEncoding(modelEncoding).build());
}
]]>
</code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>ToolchainModel</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1425,10 +1425,9 @@ private File determinePom(final CommandLine commandLine, final String workingDir
}

if (modelProcessor != null) {
return modelProcessor.locateExistingPom(current);
} else {
return current.isFile() ? current : null;
current = modelProcessor.locatePom(current);
}
return current.isFile() ? current : null;
}

// Visible for testing
Expand Down Expand Up @@ -1742,8 +1741,7 @@ static class ExitException extends Exception {
//

protected TransferListener getConsoleTransferListener(boolean printResourceNames) {
return new SimplexTransferListener(
new ConsoleMavenTransferListener(messageBuilderFactory, System.out, printResourceNames));
return new SimplexTransferListener(new ConsoleMavenTransferListener(System.out, printResourceNames));
}

protected TransferListener getBatchTransferListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@
package org.apache.maven.cli.transfer;

import java.io.PrintStream;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

import org.apache.maven.api.services.MessageBuilder;
import org.apache.maven.api.services.MessageBuilderFactory;
import org.apache.maven.jline.MessageUtils;
import org.eclipse.aether.transfer.AbstractTransferListener;
import org.eclipse.aether.transfer.TransferCancelledException;
import org.eclipse.aether.transfer.TransferEvent;
Expand All @@ -33,31 +34,177 @@
*/
@Deprecated
public abstract class AbstractMavenTransferListener extends AbstractTransferListener {
public static final String STYLE = ".transfer:-faint";

protected final MessageBuilderFactory messageBuilderFactory;
protected final PrintWriter out;
private static final String ESC = "\u001B";
private static final String ANSI_DARK_SET = ESC + "[90m";
private static final String ANSI_DARK_RESET = ESC + "[0m";

protected AbstractMavenTransferListener(MessageBuilderFactory messageBuilderFactory, PrintStream out) {
this(messageBuilderFactory, new PrintWriter(out));
// CHECKSTYLE_OFF: LineLength
/**
* Formats file size with the associated <a href="https://en.wikipedia.org/wiki/Metric_prefix">SI</a> prefix
* (GB, MB, kB) and using the patterns <code>#0.0</code> for numbers between 1 and 10
* and <code>###0</code> for numbers between 10 and 1000+ by default.
*
* @see <a href="https://en.wikipedia.org/wiki/Metric_prefix">https://en.wikipedia.org/wiki/Metric_prefix</a>
* @see <a href="https://en.wikipedia.org/wiki/Binary_prefix">https://en.wikipedia.org/wiki/Binary_prefix</a>
* @see <a
* href="https://en.wikipedia.org/wiki/Octet_%28computing%29">https://en.wikipedia.org/wiki/Octet_(computing)</a>
*/
// CHECKSTYLE_ON: LineLength
// TODO Move me to Maven Shared Utils
static class FileSizeFormat {
enum ScaleUnit {
BYTE {
@Override
public long bytes() {
return 1L;
}

@Override
public String symbol() {
return "B";
}
},
KILOBYTE {
@Override
public long bytes() {
return 1000L;
}

@Override
public String symbol() {
return "kB";
}
},
MEGABYTE {
@Override
public long bytes() {
return KILOBYTE.bytes() * KILOBYTE.bytes();
}

@Override
public String symbol() {
return "MB";
}
},
GIGABYTE {
@Override
public long bytes() {
return MEGABYTE.bytes() * KILOBYTE.bytes();
}
;

@Override
public String symbol() {
return "GB";
}
};

public abstract long bytes();

public abstract String symbol();

public static ScaleUnit getScaleUnit(long size) {
if (size < 0L) {
throw new IllegalArgumentException("file size cannot be negative: " + size);
}

if (size >= GIGABYTE.bytes()) {
return GIGABYTE;
} else if (size >= MEGABYTE.bytes()) {
return MEGABYTE;
} else if (size >= KILOBYTE.bytes()) {
return KILOBYTE;
} else {
return BYTE;
}
}
}

private DecimalFormat smallFormat;
private DecimalFormat largeFormat;

FileSizeFormat(Locale locale) {
smallFormat = new DecimalFormat("#0.0", new DecimalFormatSymbols(locale));
largeFormat = new DecimalFormat("###0", new DecimalFormatSymbols(locale));
}

public String format(long size) {
return format(size, null);
}

public String format(long size, ScaleUnit unit) {
return format(size, unit, false);
}

public String format(long size, ScaleUnit unit, boolean omitSymbol) {
if (size < 0L) {
throw new IllegalArgumentException("file size cannot be negative: " + size);
}

if (unit == null) {
unit = ScaleUnit.getScaleUnit(size);
}

double scaledSize = (double) size / unit.bytes();
String scaledSymbol = " " + unit.symbol();

if (omitSymbol) {
scaledSymbol = "";
}

if (unit == ScaleUnit.BYTE) {
return largeFormat.format(size) + scaledSymbol;
}

if (scaledSize < 0.05 || scaledSize >= 10.0) {
return largeFormat.format(scaledSize) + scaledSymbol;
} else {
return smallFormat.format(scaledSize) + scaledSymbol;
}
}

public String formatProgress(long progressedSize, long size) {
if (progressedSize < 0L) {
throw new IllegalArgumentException("progressed file size cannot be negative: " + progressedSize);
}
if (size >= 0L && progressedSize > size) {
throw new IllegalArgumentException(
"progressed file size cannot be greater than size: " + progressedSize + " > " + size);
}

if (size >= 0L && progressedSize != size) {
ScaleUnit unit = ScaleUnit.getScaleUnit(size);
String formattedProgressedSize = format(progressedSize, unit, true);
String formattedSize = format(size, unit);

return formattedProgressedSize + "/" + formattedSize;
} else {
return format(progressedSize);
}
}
}

protected AbstractMavenTransferListener(MessageBuilderFactory messageBuilderFactory, PrintWriter out) {
this.messageBuilderFactory = messageBuilderFactory;
protected PrintStream out;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PrintStream is wonky for multiple reasons. Can we just use an output stream writer instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fully agree, however the code has already been cleaned up in the non deprecated version:

public abstract class AbstractMavenTransferListener extends AbstractTransferListener {

That class is purely for compatibility, so no protected stuff should be changed.

The maven-embedder is here for compatibility and not used when launching Maven from CLI directly.


protected AbstractMavenTransferListener(PrintStream out) {
this.out = out;
}

@Override
public void transferInitiated(TransferEvent event) {
String darkOn = MessageUtils.isColorEnabled() ? ANSI_DARK_SET : "";
String darkOff = MessageUtils.isColorEnabled() ? ANSI_DARK_RESET : "";

String action = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
String direction = event.getRequestType() == TransferEvent.RequestType.PUT ? "to" : "from";

TransferResource resource = event.getResource();
MessageBuilder message = messageBuilderFactory.builder();
message.style(STYLE).append(action).append(' ').append(direction).append(' ');
message.resetStyle().append(resource.getRepositoryId());
message.style(STYLE).append(": ").append(resource.getRepositoryUrl());
message.resetStyle().append(resource.getResourceName());
StringBuilder message = new StringBuilder();
message.append(darkOn).append(action).append(' ').append(direction).append(' ');
message.append(darkOff).append(resource.getRepositoryId());
message.append(darkOn).append(": ").append(resource.getRepositoryUrl());
message.append(darkOff).append(resource.getResourceName());

out.println(message.toString());
}
Expand All @@ -72,29 +219,30 @@ public void transferCorrupted(TransferEvent event) throws TransferCancelledExcep

@Override
public void transferSucceeded(TransferEvent event) {
String darkOn = MessageUtils.isColorEnabled() ? ANSI_DARK_SET : "";
String darkOff = MessageUtils.isColorEnabled() ? ANSI_DARK_RESET : "";

String action = (event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded");
String direction = event.getRequestType() == TransferEvent.RequestType.PUT ? "to" : "from";

TransferResource resource = event.getResource();
long contentLength = event.getTransferredBytes();
FileSizeFormat format = new FileSizeFormat();
FileSizeFormat format = new FileSizeFormat(Locale.ENGLISH);

MessageBuilder message = messageBuilderFactory.builder();
message.append(action).style(STYLE).append(' ').append(direction).append(' ');
message.resetStyle().append(resource.getRepositoryId());
message.style(STYLE).append(": ").append(resource.getRepositoryUrl());
message.resetStyle().append(resource.getResourceName());
message.style(STYLE).append(" (").append(format.format(contentLength));
StringBuilder message = new StringBuilder();
message.append(action).append(darkOn).append(' ').append(direction).append(' ');
message.append(darkOff).append(resource.getRepositoryId());
message.append(darkOn).append(": ").append(resource.getRepositoryUrl());
message.append(darkOff).append(resource.getResourceName());
message.append(darkOn).append(" (").append(format.format(contentLength));

long duration = System.currentTimeMillis() - resource.getTransferStartTime();
if (duration > 0L) {
double bytesPerSecond = contentLength / (duration / 1000.0);
message.append(" at ");
format.format(message, (long) bytesPerSecond);
message.append("/s");
message.append(" at ").append(format.format((long) bytesPerSecond)).append("/s");
}

message.append(')').resetStyle();
message.append(')').append(darkOff);
out.println(message.toString());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.maven.cli.transfer;

import java.io.PrintStream;

/**
* BatchModeMavenTransferListener
*/
@Deprecated
public class BatchModeMavenTransferListener extends AbstractMavenTransferListener {
public BatchModeMavenTransferListener(PrintStream out) {
super(out);
}
}
Loading
Loading