aboutsummaryrefslogtreecommitdiffstats
path: root/mgagit
blob: 7cb960c17f043bcf6c637fa60dfede226839c3d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl -w

use strict;
use MGA::Git;
#use Data::Dump qw/dd/;

my %actions = (
    glconf => {
        run  => \&glconf,
        descr => 'Print gitolite configuration',
        usage => <<END,
$0 glconf [repo]

Print the gitolite configuration. Optionaly you can add a repository
name as parameter to display the configuration for this repository only.
END
    },
    glrun  => {
        run  => \&glrun,
        descr => 'Update gitolite configuration',
        usage => <<END,
$0 glrun

Update gitolite configuration, and run gitolite if changed.
END
    },
    usage  => {
        run   => \&usage,
        descr => 'Show usage informations for an action',
        usage => <<END,
$0 usage [action]

Show action usage
END
    },
);

sub usage {
    if ($_[1] && $actions{$_[1]}) {
        print STDERR $actions{$_[1]}->{usage};
    } else {
        print STDERR "$0 [action] [options]\n";
        print STDERR "$0 usage [action]\n\n";
        print STDERR "Available actions:\n";
        print STDERR map { " - $_ : $actions{$_}->{descr}\n" } keys %actions;
    }
}
sub usageexit {
    usage(@_);
    exit 1;
}

sub glconf {
    usageexit('usage', $_[0]) unless @_ <= 2;
    my %r;
    MGA::Git::load_gitrepos(\%r);
    MGA::Git::load_groups(\%r) if @_ == 1;
    MGA::Git::load_users(\%r);
    if (my $repo = $_[1]) {
        if (!$r{repos}{$repo}) {
            print STDERR "Cannot find repository $repo\n";
            exit 1;
        }
        print MGA::Git::gitolite_repo_config(\%r, $repo);
    } else {
        print MGA::Git::gitolite_config(\%r), "\n";
    }
}

sub glrun {
    usageexit('usage', $_[0]) unless @_ == 1;
    my %r;
    MGA::Git::load_gitrepos(\%r);
    MGA::Git::load_groups(\%r);
    MGA::Git::load_users(\%r);
    MGA::Git::dumpdb(\%r);
    MGA::Git::update_gitolite_keydir(\%r);
    MGA::Git::update_gitolite_config(\%r);
    MGA::Git::run_gitolite(\%r);
}

if (@ARGV == 0 || !$actions{$ARGV[0]}) {
    usageexit();
}
$actions{$ARGV[0]}->{run}->(@ARGV);