Blob


1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 my $config={
5 stageDir=>'/var/gitgot',
6 gitgotUser=>'gitgot',
7 gotwebDir=>'/var/www/got/public',
8 };
9 # Sync changes from stageDir to the webdir
10 opendir (my $DH, $config->{stageDir})
11 or die "Can't opendir " . $config->{stageDir} . " : $!";
12 while (my $user = readdir($DH)) {
13 next if ($user =~ /^\./); # skip . files
14 if (-d $config->{stageDir} . "/$user") {
15 # Need the name of each repo so we can add username ass prefix
16 opendir (my $uDH, $config->{stageDir} . "/$user")
17 or die "Can't opendir ". $config->{stageDir} . "/$user/ : $!";
18 while (my $repo = readdir($uDH)) {
19 next if ($repo =~ /^\./); # skip . files
20 # need destination folder name to change to prefix
21 # the username to it to prevent one user from clobbering
22 # another users repos. Can't do a rename of the folder
23 # with rsync so have to create the destination folder then
24 # rsync the contents of it.
25 my @stat=stat($config->{stageDir} . "/$user/$repo");
26 my $prefixName="$user-$repo";
27 my $dst=qq(/$config->{gotwebDir}/$prefixName/);
28 mkdir $dst,$stat[2]; #stat[2] is mode of original dir
29 opendir (my $rDH, $config->{stageDir} . "/$user/$repo")
30 or die "Can't opendir ". $config->{stageDir} . "/$user/$repo : $!";
31 while (my $git = readdir($rDH)) {
32 next if ($git eq '.' or $git eq '..'); # skip . and ..
34 my $src=qq($config->{stageDir}/$user/$repo/$git);
35 my $rv=system(qq{
36 openrsync --rsync-path=openrsync -a --delete $src $dst
37 });
38 warn "rsync failed $prefixName\n$!\n" if ($rv != 0);
39 }
40 }
41 }
42 }