[ https://issues.apache.org/jira/browse/SCM-914?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17831474#comment-17831474 ]
ASF GitHub Bot commented on SCM-914: ------------------------------------ kwin commented on code in PR #193: URL: https://github.com/apache/maven-scm/pull/193#discussion_r1541522843 ########## maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java: ########## @@ -43,31 +49,34 @@ public class GitInfoCommand extends AbstractCommand implements GitCommand { protected ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters) throws ScmException { - GitInfoConsumer consumer = new GitInfoConsumer(fileSet); - CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); - - Commandline cli = createCommandLine(repository, fileSet, parameters); + Commandline baseCli = GitCommandLineUtils.getBaseGitCommandLine(fileSet.getBasedir(), "log"); + baseCli.createArg().setValue("-1"); // only most recent commit matters + baseCli.createArg().setValue("--no-merges"); // skip merge commits + baseCli.addArg(GitInfoConsumer.getFormatArgument()); - int exitCode = GitCommandLineUtils.execute(cli, consumer, stderr); - if (exitCode != 0) { - return new InfoScmResult(cli.toString(), "The git rev-parse command failed.", stderr.getOutput(), false); + List<InfoItem> infoItems = new LinkedList<>(); + if (fileSet.getFileList().isEmpty()) { + infoItems.add(executeInfoCommand(baseCli, parameters, fileSet.getBasedir())); + } else { + // iterate over files + for (File scmFile : fileSet.getFileList()) { + Commandline cliClone = (Commandline) baseCli.clone(); + cliClone.createArg().setFile(scmFile); + infoItems.add(executeInfoCommand(cliClone, parameters, scmFile)); + } } - return new InfoScmResult(cli.toString(), consumer.getInfoItems()); + return new InfoScmResult(baseCli.toString(), infoItems); } - public static Commandline createCommandLine( - ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters) throws ScmException { - Commandline cli = GitCommandLineUtils.getBaseGitCommandLine(fileSet.getBasedir(), "rev-parse"); - cli.createArg().setValue("--verify"); - final int revLength = getRevisionLength(parameters); - if (revLength > NO_REVISION_LENGTH) // set the --short key only if revision length parameter is passed and - // different from -1 - { - cli.createArg().setValue("--short=" + revLength); + protected InfoItem executeInfoCommand(Commandline cli, CommandParameters parameters, File scmFile) + throws ScmException { + GitInfoConsumer consumer = new GitInfoConsumer(scmFile.toPath(), getRevisionLength(parameters)); + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + int exitCode = GitCommandLineUtils.execute(cli, consumer, stderr); + if (exitCode != 0) { + throw new ScmException("The git log command failed:" + cli.toString() + " returned " + stderr.getOutput()); Review Comment: fixed > InfoItem.lastChangedDate is leaky abstraction > --------------------------------------------- > > Key: SCM-914 > URL: https://issues.apache.org/jira/browse/SCM-914 > Project: Maven SCM > Issue Type: Bug > Components: maven-scm-api > Reporter: Tobias Gruetzmacher > Assignee: Konrad Windszus > Priority: Minor > > I was looking into implementing > [https://github.com/mojohaus/buildnumber-maven-plugin/pull/16] in a sane way, > but had to conclude that InfoItem.lastChangedDate is unfortunately just a > string and not a Data, so will leak the console output of different providers > to the user. > Does anybody see a sane way to fix this API and create a sane abstraction for > different SCMs? If yes, I would try to go ahead with the following tasks: > # Fix InfoItem, so that lastChangedDate is a Date > # Fix the current providers filling this field (svnexe and svnjava AFAICS - > aside: why is svnjava not part of the maven-scm repository?) > # Implement this feature for at least gitexe (and maybe jgit) so I can use > it for my usecase > Ideas, comments? -- This message was sent by Atlassian Jira (v8.20.10#820010)