tools/versionchanger.pl
author Michael McKoy <ferret99gt@gmail.com>
Thu Aug 09 00:31:45 2007 +0000 (2007-08-09)
changeset 1285 a83f449ab2f8
parent 570 c6b959fbef07
permissions -rw-r--r--
Basevote changes based on testing and BAILOFEEDBACK
dvander@567
     1
#!/usr/bin/perl
dvander@567
     2
dvander@567
     3
our %arguments =
dvander@567
     4
(
dvander@567
     5
	'config' => 'modules.versions',
dvander@567
     6
	'major' => '1',
dvander@567
     7
	'minor' => '0',
dvander@567
     8
	'revision' => '0',
dvander@567
     9
	'build' => undef,
dvander@567
    10
	'svnrev' => 'global',
dvander@567
    11
	'path' => '',
dvander@567
    12
);
dvander@567
    13
dvander@567
    14
my $arg;
dvander@567
    15
foreach $arg (@ARGV)
dvander@567
    16
{
dvander@567
    17
	$arg =~ s/--//;
dvander@567
    18
	@arg = split(/=/, $arg);
dvander@567
    19
	$arguments{$arg[0]} = $arg[1];
dvander@567
    20
}
dvander@567
    21
dvander@567
    22
#Set up path info
dvander@567
    23
if ($arguments{'path'} ne "")
dvander@567
    24
{
dvander@567
    25
	if (!(-d $arguments{'path'}))
dvander@567
    26
	{
dvander@567
    27
		die "Unable to find path: " . $arguments{'path'} ."\n";
dvander@567
    28
	}
dvander@567
    29
	chdir($arguments{'path'});
dvander@567
    30
}
dvander@567
    31
dvander@567
    32
if (!open(CONFIG, $arguments{'config'}))
dvander@567
    33
{
dvander@567
    34
	die "Unable to open config file for reading: " . $arguments{'config'} . "\n";
dvander@567
    35
}
dvander@567
    36
dvander@567
    37
our %modules;
dvander@567
    38
my $cur_module = undef;
dvander@567
    39
my $line;
dvander@567
    40
while (<CONFIG>)
dvander@567
    41
{
dvander@567
    42
	chomp;
dvander@567
    43
	$line = $_;
dvander@567
    44
	if ($line =~ /^\[([^\]]+)\]$/)
dvander@567
    45
	{
dvander@567
    46
		$cur_module = $1;
dvander@567
    47
		next;
dvander@567
    48
	}
dvander@567
    49
	if (!$cur_module)
dvander@567
    50
	{
dvander@567
    51
		next;
dvander@567
    52
	}
dvander@567
    53
	if ($line =~ /^([^=]+) = (.+)$/)
dvander@567
    54
	{
dvander@567
    55
		$modules{$cur_module}{$1} = $2;
dvander@567
    56
	}
dvander@567
    57
}
dvander@567
    58
dvander@567
    59
close(CONFIG);
dvander@567
    60
dvander@567
    61
#Copy global configuration options...
dvander@567
    62
if (exists($modules{'PRODUCT'}))
dvander@567
    63
{
dvander@567
    64
	if (exists($modules{'PRODUCT'}{'major'}))
dvander@567
    65
	{
dvander@567
    66
		$arguments{'major'} = $modules{'PRODUCT'}{'major'};
dvander@567
    67
	}
dvander@567
    68
	if (exists($modules{'PRODUCT'}{'minor'}))
dvander@567
    69
	{
dvander@567
    70
		$arguments{'minor'} = $modules{'PRODUCT'}{'minor'};
dvander@567
    71
	}
dvander@567
    72
	if (exists($modules{'PRODUCT'}{'revision'}))
dvander@567
    73
	{
dvander@567
    74
		$arguments{'revision'} = $modules{'PRODUCT'}{'revision'};
dvander@567
    75
	}
dvander@567
    76
	if (exists($modules{'PRODUCT'}{'svnrev'}))
dvander@567
    77
	{
dvander@567
    78
		$arguments{'svnrev'} = $modules{'PRODUCT'}{'svnrev'};
dvander@567
    79
	}
dvander@567
    80
}
dvander@567
    81
dvander@567
    82
#Get the global SVN revision if we have none
dvander@567
    83
my $rev;
dvander@567
    84
if ($arguments{'build'} == undef)
dvander@567
    85
{
dvander@567
    86
	$rev = GetRevision(undef);
dvander@567
    87
} else {
dvander@567
    88
	$rev = int($arguments{'build'});
dvander@567
    89
}
dvander@567
    90
dvander@567
    91
my $major = $arguments{'major'};
dvander@567
    92
my $minor = $arguments{'minor'};
dvander@567
    93
my $revision = $arguments{'revision'};
dvander@567
    94
my $svnrev = $arguments{'svnrev'};
dvander@567
    95
dvander@567
    96
#Go through everything now
dvander@567
    97
my $mod_i;
dvander@567
    98
while ( ($cur_module, $mod_i) = each(%modules) )
dvander@567
    99
{
dvander@567
   100
	#Skip the magic one
dvander@567
   101
	if ($cur_module eq "PRODUCT")
dvander@567
   102
	{
dvander@567
   103
		next;
dvander@567
   104
	}
dvander@567
   105
	#Prepare path
dvander@567
   106
	my %mod = %{$mod_i};
dvander@567
   107
	my $infile = $mod{'in'};
dvander@567
   108
	my $outfile = $mod{'out'};
dvander@567
   109
	if ($mod{'folder'})
dvander@567
   110
	{
dvander@567
   111
		if (!(-d $mod{'folder'}))
dvander@567
   112
		{
dvander@567
   113
			die "Folder " . $mod{'folder'} . " not found.\n";
dvander@567
   114
		}
dvander@567
   115
		$infile = $mod{'folder'} . '/' . $infile;
dvander@567
   116
		$outfile = $mod{'folder'} . '/' . $outfile;
dvander@567
   117
	}
dvander@567
   118
	if (!(-f $infile))
dvander@567
   119
	{
dvander@567
   120
		die "File $infile is not a file.\n";
dvander@567
   121
	}
dvander@567
   122
	my $global_rev = $rev;
dvander@567
   123
	my $local_rev = GetRevision($mod{'folder'});
dvander@567
   124
	if ($arguments{'svnrev'} eq 'local')
dvander@567
   125
	{
dvander@567
   126
		$global_rev = $local_rev;
dvander@567
   127
	}
dvander@567
   128
	#Start rewriting
dvander@567
   129
	open(INFILE, $infile) or die "Could not open file for reading: $infile\n";
dvander@567
   130
	open(OUTFILE, '>'.$outfile) or die "Could not open file for writing: $outfile\n";
dvander@567
   131
	while (<INFILE>)
dvander@567
   132
	{
dvander@567
   133
		s/\$PMAJOR\$/$major/g;
dvander@567
   134
		s/\$PMINOR\$/$minor/g;
dvander@567
   135
		s/\$PREVISION\$/$revision/g;
dvander@567
   136
		s/\$GLOBAL_BUILD\$/$rev/g;
dvander@567
   137
		s/\$LOCAL_BUILD\$/$local_rev/g;
dvander@567
   138
		print OUTFILE $_;
dvander@567
   139
	}
dvander@567
   140
	close(OUTFILE);
dvander@567
   141
	close(INFILE);
dvander@567
   142
}
dvander@567
   143
dvander@567
   144
sub GetRevision
dvander@567
   145
{
dvander@567
   146
	my ($path)=(@_);
dvander@567
   147
	my $rev;
dvander@567
   148
	if (!$path)
dvander@567
   149
	{
dvander@567
   150
		$rev = `svnversion --committed`;
dvander@567
   151
	} else {
dvander@567
   152
		$rev = `svnversion --committed $path`;
dvander@567
   153
	}
dvander@567
   154
	if ($rev =~ /exported/)
dvander@567
   155
	{
dvander@567
   156
		die "Path specified is not a working copy\n";
dvander@567
   157
	} elsif ($rev =~ /(\d+):(\d+)/) {
dvander@567
   158
		$rev = int($2);
dvander@567
   159
	} elsif ($rev =~ /(\d+)/) {
dvander@567
   160
		$rev = int($1);
dvander@567
   161
	} else {
dvander@567
   162
		die "Unknown svnversion response: $rev\n";
dvander@567
   163
	}
dvander@567
   164
	return $rev;
dvander@567
   165
}