something vaguely representing what we need

This commit is contained in:
anon 2025-08-17 15:12:07 +02:00
parent bb90c030df
commit cd2b1f4b2f

57
git-construct.pl Executable file
View 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('./') );