--- /dev/null
+#!/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('./') );