something vaguely representing what we need
This commit is contained in:
parent
bb90c030df
commit
cd2b1f4b2f
57
git-construct.pl
Executable file
57
git-construct.pl
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Git::Repository;
|
||||||
|
use Cwd 'realpath';
|
||||||
|
use File::Basename;
|
||||||
|
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
sub new_repository {
|
||||||
|
my ($path) = @_;
|
||||||
|
$path = realpath($path);
|
||||||
|
|
||||||
|
my $name = basename($path);
|
||||||
|
my $repo = Git::Repository->new(work_tree => $path);
|
||||||
|
|
||||||
|
my @raw_branches = $repo->run('branch');
|
||||||
|
my @branches;
|
||||||
|
|
||||||
|
for my $b (@raw_branches) {
|
||||||
|
chomp $b;
|
||||||
|
my $is_active = 0;
|
||||||
|
|
||||||
|
if ($b =~ /^\* /) {
|
||||||
|
$b =~ s/^\* //;
|
||||||
|
$is_active = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @commits;
|
||||||
|
my @logs = $repo->run(log => $b, '--pretty=format:%H;%an;%s');
|
||||||
|
for my $line (@logs) {
|
||||||
|
my ($hash, $author, $message) = split /;/, $line, 3;
|
||||||
|
push @commits, {
|
||||||
|
hash => $hash,
|
||||||
|
author => $author,
|
||||||
|
message => $message,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
push @branches, {
|
||||||
|
name => $b,
|
||||||
|
is_active => $is_active,
|
||||||
|
commits => \@commits,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
my $owner = $repo->run('log', '--reverse', '--pretty=format:%an');
|
||||||
|
|
||||||
|
return {
|
||||||
|
name => $name,
|
||||||
|
owner => $owner,
|
||||||
|
branches => \@branches,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
print Dumper( new_repository('./') );
|
||||||
Loading…
Reference in New Issue
Block a user