diff options
Diffstat (limited to 'src/newrepo.pl')
-rwxr-xr-x | src/newrepo.pl | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/newrepo.pl b/src/newrepo.pl new file mode 100755 index 0000000..dc8041b --- /dev/null +++ b/src/newrepo.pl @@ -0,0 +1,76 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; +use File::Find; +use constant HOME_DIR => '/usr/local/git/'; + +sub main +{ + my $argc = $#ARGV + 1; + if ($argc < 2) { + print colored("Failed!\n", 'bold red') + . "Missing argument, at least 2 needed " + . colored("[user - reponame - (description)]", 'bold') + . "\n"; + exit 1; + } + my $usr = $ARGV[0]; + my $repo = $ARGV[1]; + my $desc = ""; + if ($argc >= 3) { + $desc = $ARGV[2]; + } + my $home_dir = HOME_DIR . $usr . '/'; + if (substr($repo, -4) ne '.git') { + $repo = $repo . '.git'; + } + $repo = $repo . '/'; + mkdir $home_dir . $repo, 0755; + system( + '/usr/local/bin/git', + '-C', + $home_dir . $repo, + 'init', + '--bare' + ); + my (undef, undef, $uid, $gid) = getpwnam($usr); + find( + sub { + chown $uid, $gid, $_; + }, + $home_dir . $repo + ); + system( + '/usr/bin/touch', + $home_dir . $repo . 'git-daemon-export-ok' + ); + chown $uid, $gid, $home_dir . $repo . 'git-daemon-export-ok'; + open(my $owner_fh, '>:encoding(UTF-8)', $home_dir . $repo . 'owner'); + print $owner_fh $usr; + close($owner_fh); + open(my $url_fh, '>:encoding(UTF-8)', $home_dir . $repo . 'url'); + substr($repo, -1) = ""; + print $url_fh 'git://gitjoe.xyz/' . $usr . '/' . $repo; + close($url_fh); + $repo = $repo . '/'; + open(my $desc_fh, '>:encoding(UTF-8)', $home_dir . $repo . 'description'); + if ($argc >= 3) { + print $desc_fh $desc; + } + else { + print $desc_fh 'No description yet'; + } + close($desc_fh); + chown $uid, $gid, $home_dir . $repo . 'description'; + substr($repo, -1) = ""; + print "Created git repository " . colored($repo, 'bold green') . " for user " . colored($usr, 'bold') . ".\n"; + print "Remote url: " . colored($usr . '@gitjoe.xyz:' . $repo, 'bold green') . "\n" + . "Public clone url: " . colored('git://gitjoe.xyz/' . $usr . '/' . $repo, 'bold green') . "\n"; + exit; +} + +main(); + +__END__ |