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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Tabular qw( );
use Moose::Util::TypeConstraints qw( find_type_constraint );
use Piny;
my ( $batch ) = ( 0 );
my ( $name, $remote, $ikiwiki );
Getopt::Tabular::SetOptionPatterns( "(--)[\\w-]+", "(-)\\w" );
Getopt::Tabular::SetHelpOption( "--help" );
Getopt::Tabular::GetOptions(
[
[ "--batch", "const", 1, \$batch, "enable batch mode, for use as a backend by other scripts" ],
[ "--enable-ikiwiki|--disable-ikiwiki", "boolean", 0, \$ikiwiki, "enable or disable creation of an ikiwiki site for this repo" ]
], \@ARGV
) or exit( 0 );
( $name, $remote ) = @ARGV;
if ( not defined $name ) {
print( "Usage: newrepo REPONAME\n" );
exit( 1 );
};
if ( not find_type_constraint( "Reponame" )->check( $name ) ) {
print "That is not a valid repo name; must be at least 1 character long, begin with a lowercase alphanumeric character, and contain only alphanumeric characters and dashes.\n";
exit( 2 );
};
my $description;
while( 1 ) {
print "Provide a one-line description to be used in repo listings, the shorter the better:\n";
chomp( $description = <STDIN> );
if ( not find_type_constraint( "SimpleText" )->check( $description ) ) {
print "Must be 1-80 characters long; control characters (including tab) not allowed.\n";
if ( $batch ) {
exit( 3 );
};
next;
};
print "Okay! Working, please wait...\n";
last;
};
my $config = Piny::Config->new( );
my $dest = $config->piny_adminemail;
unless( open( MAIL, "|/usr/lib/sendmail -t" ) ) {
die "Couldn't execute sendmail: $!\n";
};
print MAIL <<END;
To: $dest
Subject: Creating piny repo $name
Content-type: text/plain; charset=us-ascii
A new piny repo ``$name'' has been created.
Description: $description
END
if( defined( $remote ) ) {
print( MAIL "\nRemote: $remote\n" );
};
close( MAIL );
my $repo;
if( defined( $remote ) ) {
$repo = Piny::Repo->create( $name, $description, $remote );
} else {
$repo = Piny::Repo->create( $name, $description );
};
$repo->rebuild_git;
if ( defined( $ikiwiki ) ) {
$repo->config->piny_ikiwiki( $ikiwiki );
if ( $repo->config->piny_ikiwiki ne $ikiwiki ) {
print( "Override in place for piny.ikiwiki.\n" );
};
};
if ( $repo->config->piny_ikiwiki ) {
$repo->rebuild_ikiwiki;
print( "Repo URL: " . $repo->ikiwiki_url . "\n" );
} else {
print( "Ikiwiki disabled.\n" );
};
print( "Repo URL: " . $repo->cgit_url . "\n" );
|