1#!/usr/bin/perl -w 2# 3# $Id: updateGenii.pl 1265 2010-09-17 12:25:42Z rdempsey $ 4# 5 6use Getopt::Std; 7 8sub usage 9{ 10 my $msg = <<'EOD' 11usage: updateGenii.pl [-h] [-b|-t branch/tag] [-r root] [-a] 12 -h Display this help 13 -b branch Update a branch wc 14 -t tag Update a tag wc 15 -r root Use root as the starting point rather than $HOME 16 -a Update wc for all svn projects, even deprecated ones 17EOD 18; 19 print "$msg\n"; 20} 21 22sub findRepos 23{ 24 my @repolist = (); 25 my $all = ''; 26 27 $all = '?All' if ($opt_a); 28 29 open(FH, 'curl -s http://srvengcm1.calpont.com/cgi-bin/listRepos.pl' . $all . ' |'); 30 while (<FH>) 31 { 32 $_ =~ s/[\r\n]*$//; 33 push(@repolist, $_); 34 } 35 close(FH); 36 37 return @repolist; 38} 39 40if (!getopts('hab:r:t:')) 41{ 42 usage(); 43 exit 1; 44} 45 46if (defined($opt_h)) 47{ 48 $opt_h = 1; 49 usage(); 50 exit 0; 51} 52 53$opt_a = 1 if (defined($opt_a)); 54 55$prjroot = 'genii'; 56$prjroot = $opt_r if (defined($opt_r)); 57$prjroot = $opt_b if (defined($opt_b)); 58$prjroot = $opt_t if (defined($opt_t)); 59 60if (!defined($opt_b) && !defined($opt_t) && $#ARGV >= 0) 61{ 62 usage(); 63 exit 1; 64} 65 66if (defined($opt_b) || defined($opt_t)) 67{ 68 $cmd = 'svn list http://srvengcm1.calpont.com/svn/genii/dbcon/'; 69 if (defined($opt_b)) 70 { 71 $cmd = $cmd . 'branches'; 72 } 73 else 74 { 75 $cmd = $cmd . 'tags'; 76 } 77 $listcmd = $cmd; 78 $tmp = $prjroot; 79 $tmp =~ s/\./\\./g; 80 $cmd = $cmd . " 2>/dev/null | egrep '^" . $tmp . "/' | wc -l"; 81 $brcnt = `$cmd`; 82 if ($brcnt != 1) 83 { 84 print "branch/tag $prjroot not found. Choices are:\n"; 85 $listcmd = $listcmd . ' | sed s,/\$,,'; 86 system($listcmd); 87 exit 1; 88 } 89} 90 91chdir $ENV{'HOME'} or die; 92 93$destDir = $prjroot; 94if ((defined($opt_b) || defined($opt_t)) && defined($opt_r)) 95{ 96 $destDir = $opt_r; 97} 98mkdir $destDir if (! -d $destDir); 99 100chdir $destDir or die; 101 102@repos = findRepos(); 103@mergelines = (); 104@conflictlines = (); 105 106foreach $repo (@repos) 107{ 108 #print $repo, "\n"; next; 109 if (-d $repo . '/.svn') 110 { 111 print $repo, ": \n"; 112 chdir $repo or die; 113 open FH, 'svn update |'; 114 @svnlines = <FH>; 115 close FH; 116 foreach $line (@svnlines) 117 { 118 print "$line"; 119 if ($line =~ /^C/) 120 { 121 push(@conflictlines, $repo . ": " . $line); 122 } 123 elsif ($line =~ /^G/) 124 { 125 push(@mergelines, $repo . ": " . $line); 126 } 127 } 128 129 chdir '..' or die; 130 } 131 else 132 { 133 print $repo, ": \n"; 134 if (defined($opt_b)) 135 { 136 $svncmd = 'svn checkout http://srvengcm1.calpont.com/svn/genii/' . $repo . '/branches/' . 137 $prjroot . ' ' . $repo; 138 } 139 elsif (defined($opt_t)) 140 { 141 $svncmd = 'svn checkout http://srvengcm1.calpont.com/svn/genii/' . $repo . '/tags/' . 142 $prjroot . ' ' . $repo; 143 } 144 else 145 { 146 $svncmd = 'svn checkout http://srvengcm1.calpont.com/svn/genii/' . $repo . '/trunk/' . ' ' . 147 $repo; 148 } 149 system $svncmd; 150 } 151} 152 153unlink 'merges.txt'; 154unlink 'conflicts.txt'; 155 156if ($#mergelines >= 0) 157{ 158 print "\n** Warning! merges:\n"; 159 foreach $merge (@mergelines) 160 { 161 print "$merge"; 162 } 163 open FH, ">merges.txt"; 164 print FH @mergelines; 165 close FH; 166 print "This information has been saved in merges.txt\n"; 167} 168 169if ($#conflictlines >= 0) 170{ 171 print "\n** Warning! conflicts:\n"; 172 foreach $conflict (@conflictlines) 173 { 174 print "$conflict"; 175 } 176 open FH, ">conflicts.txt"; 177 print FH @conflictlines; 178 close FH; 179 print "This information has been saved in conflicts.txt\n"; 180} 181 182if (! -e 'Makefile') 183{ 184 system './build/bootstrap'; 185} 186 187