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