这是一个将运行svn log
和解析输出的版本。
当然,我没有你的仓库,所以我不得不通过cat
输入你的输出来伪造命令和输出,但它可以工作。
use strict;
my $revno = shift @ARGV;
die "Usage: $0: svn-revision\n" unless $revno;
my $cmd = "svn log -v -r$revno 'http://svn-remote.com/path'";
open(SVN,"$cmd |") or die "Command '$cmd' Failed : $!\n";
while(<SVN>) {
chomp;
if ( /^\s+\S\s\/([^\/]+\/[^\/]+).*[^\/]$/ ) {
(my $tag = $1) =~ s!/!.!g;
s!.*/src/main/java/!!;
my @a = split(/\//);
my $file = pop @a;
print $tag, " ", join(".", @a), " ", $file, "\n";
}
}
我的测试输出。
PROJECT.CYCLE com.companyname.cycle.agent Main.java
PROJECT.CYCLE com.companyname.cycle.agent.bll.tasks CycleGroupTask.java
PROJECT.CYCLE com.companyname.cycle.agent.bll.tasks CycleProcessTaskBll.java
PROJECT.CYCLE com.companyname.cycle.agent.bll.tasks CycleSequenceProcessTaskBll.java
PROJECT.CYCLE com.companyname.cycle.test.bll MockCycleBll.java
PROJECT.CYCLE com.companyname.pas.cycle.bll DasCycleBll.java
PROJECT.CYCLE com.companyname.pas.cycle.dal DasCycleDal.java
maven repo 也会有一个src/test/java
目录:D,我想你对它们不感兴趣。
编辑
针对您的数据运行 Perl 的主体,基本上my $cmd = "sh fake.sh";
从另一个问题添加会产生:
PROJECT.CYCLE com.companyname.cycle.agent Main.java
PROJECT.CYCLE com.companyname.cycle.agent.bll.tasks CycleGroupTask.java
PROJECT.CYCLE com.companyname.cycle.agent.bll.tasks CycleProcessTaskBll.java
PROJECT.CYCLE com.companyname.cycle.agent.bll.tasks CycleSequenceProcessTaskBll.java
PROJECT.CYCLE com.companyname.cycle.test.bll MockCycleBll.java
PROJECT.CYCLE com.companyname.pas.cycle.bll DasCycleBll.java
PROJECT.CYCLE com.companyname.pas.cycle.dal DasCycleDal.java
PROJECT.SHARED com.companyname.extensibility NamedExtensionPoint.java
PROJECT.SHARED com.companyname.extensibility PrePostExtensionPoint.java
PROJECT.SHARED com.companyname.extensibility.helper ExtensionConfigurationHelper.java
PROJECT.SRE com.companyname.ext DocumentGeneratorExt.java
PROJECT.SRE com.companyname.ext NamedExtensionPoint.java
PROJECT.SRE com.companyname.ext SystemDateBll.java
MODULE.CYCLE com.companyname.extensibility FileCycle1.java
MODULE.CYCLE com.companyname.extensibility FileCycle2.java
这似乎是 OP 在另一个问题中想要的。
因此,问题将是在 Perl 的主体中为 each 循环一次$revno
。
foreach my $revno (@ARGV) {
print $revno, "\n";
}
编辑按模块将代码组的主体更改为...
my %info;
while(<SVN>) {
chomp;
if ( /^\s+\S\s\/([^\/]+\/[^\/]+).*[^\/]$/ ) {
(my $tag = $1) =~ s!/!.!g;
s!.*/src/main/java/!!;
my @a = split(/\//);
my $file = pop @a;
print $tag, " ", join(".", @a), " ", $file, "\n";
push @{$info{$tag}}, join(" ", join(".", @a), $file);
#push @{$info{$tag}}, $file;
}
}
while ( my ($key, $value) = each %info )
{
print "$key\n";
for my $line ( @{$info{$key}} ) {
print "\t", $line, "\n";
}
}
在之前给出的数据上产生这个。
PROJECT.SHARED
com.companyname.extensibility NamedExtensionPoint.java
com.companyname.extensibility PrePostExtensionPoint.java
com.companyname.extensibility.helper ExtensionConfigurationHelper.java
PROJECT.CYCLE
com.companyname.cycle.agent Main.java
com.companyname.cycle.agent.bll.tasks CycleGroupTask.java
com.companyname.cycle.agent.bll.tasks CycleProcessTaskBll.java
com.companyname.cycle.agent.bll.tasks CycleSequenceProcessTaskBll.java
com.companyname.cycle.test.bll MockCycleBll.java
com.companyname.pas.cycle.bll DasCycleBll.java
com.companyname.pas.cycle.dal DasCycleDal.java
MODULE.CYCLE
com.companyname.extensibility FileCycle1.java
com.companyname.extensibility FileCycle2.java
PROJECT.SRE
com.companyname.ext DocumentGeneratorExt.java
com.companyname.ext NamedExtensionPoint.java
com.companyname.ext SystemDateBll.java
这应该以某种方式帮助 OP 实现他们想要的。