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