From: Jan P. <jp...@us...> - 2006-08-04 12:26:12
|
Update of /cvsroot/e-p-i-c/org.epic.website/admin In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv30165/admin Added Files: update_feature_ver.pl update_plugin_ver.pl build.xml Log Message: Added scripts for managing EPIC releases. --- NEW FILE: update_plugin_ver.pl --- #!/usr/bin/perl # # Increases/decreases the minor (rightmost) version number of an Eclipse # plug-in by 1. This is achieved by updating plugin.xml, META-INF/MANIFEST.MF # and build.xml. Also updates feature.xml to reflect the change. # # Usage: $0 <path to plug-in directory> <-inc|-dec|-0> use strict; use warnings; my $op = $ARGV[0] || ''; my $plugin_dir = $ARGV[1]; my $delta; if ($op eq '-inc') { $delta = 1; } elsif ($op eq '-dec') { $delta = -1; } elsif ($op eq '-0') { $delta = 0; } # just update feature.xml else { die "$0: Invalid argument: $op"; }; if (!defined($plugin_dir) || !(-d $plugin_dir)) { print STDERR "$0: Specify the path to the plug-in's directory as the first argument.\n"; exit(1); } if (!(-f "$plugin_dir/plugin.xml")) { print STDERR "$0: plugin.xml not found.\n"; exit(1); } if (!(-f "$plugin_dir/build.xml")) { print STDERR "$0: build.xml not found.\n"; exit(1); } my $plugin_id = $plugin_dir; if ($plugin_id =~ m/([^\\\/]*)$/s) { $plugin_id = $1; } else { die "Could not determine plug-in id."; } my $current_ver = get_current_version(); my $next_ver = update_version($current_ver, $delta); subst_in_file( "$plugin_dir/plugin.xml", "version\\s*=\\s*\"$current_ver\"", "version=\"$next_ver\""); subst_in_file( "$plugin_dir/build.xml", '_'.$current_ver, '_'.$next_ver); if (-f "$plugin_dir/META-INF/MANIFEST.MF") { subst_in_file( "$plugin_dir/META-INF/MANIFEST.MF", "Bundle-Version: $current_ver", "Bundle-Version: $next_ver"); } my $feature_path = "$plugin_dir/../org.epic.feature.main/feature.xml"; my $feature = read_file($feature_path); if ($feature =~ m/(<plugin\s+id="$plugin_id"[^>]*version="$current_ver"[^>]*>)/s) { my $plugin_entry_old = $1; my $plugin_entry_new = $plugin_entry_old; $plugin_entry_new =~ s/version="$current_ver"/version="$next_ver"/s; $plugin_entry_old = quotemeta($plugin_entry_old); $feature =~ s/$plugin_entry_old/$plugin_entry_new/; open(FL, ">$feature_path") || die "could not open $feature_path: $!"; print FL $feature; close(FL); } else { die "Could not find plug-in entry in feature.xml"; } sub get_current_version { my $content = read_file("$plugin_dir/plugin.xml"); my $version; if ($content =~ m/version\s*=\s*"(\d+\.\d+\.\d+)"/s) { $version = $1; } else { if (-f "$plugin_dir/META-INF/MANIFEST.MF") { $content = read_file("$plugin_dir/META-INF/MANIFEST.MF"); if ($content =~ m/Bundle-Version: (\d+\.\d+\.\d+)/s) { $version = $1; } } } if (!defined($version)) { die "Plug-in version missing in plugin.xml and META-INF/MANIFEST.MF"; } return $version; } sub read_file { my $path = shift; my $text = ''; open(FL, "<$path") || die "could not open $path: $!"; while (<FL>) { $text .= $_; } close(FL); return $text; } sub subst_in_file { my $path = shift; my $regex = shift; my $subst = shift; my $text = read_file($path); $text =~ s/$regex/$subst/g; open(FL, ">$path") || die "could not open $path: $!"; print FL $text; close(FL); } sub update_version { my $version = shift; my $delta = shift; $version =~ m/(\d+\.\d+\.)(\d+)/; my $major = $1; my $minor = $2; $minor += $delta; return "$major$minor"; } --- NEW FILE: build.xml --- <?xml version="1.0" encoding="UTF-8"?> <!-- Ant script for building a release of EPIC. Used to (optionally) bump up version numbers on the plug-ins and the feature, to compile everything and to transfer files to a target update site. --> <project name="org.epic.website" default="release" basedir="."> <property name="javacSource" value="1.4"/> <property name="javacTarget" value="1.3"/> <property name="javacDebugInfo" value="false"/> <property name="javacVerbose" value="false"/> <property name="javacFailOnError" value="true"/> <target name="check-env"> <fail message="This script must run within Eclipse JRE; check build.xml properties."> <condition> <not><isset property="eclipse.running"/></not> </condition> </fail> <fail message="Property workspace.path must be defined and point to the workspace directory."> <condition> <not><isset property="workspace.path"/></not> </condition> </fail> <fail message="Property site.path must be defined and point to the target update site directory."> <condition> <not><isset property="site.path"/></not> </condition> </fail> </target> <target name="incver"> <exec executable="perl"> <arg value="update_plugin_ver.pl"/> <arg value="-inc"/> <arg value="${workspace.path}/${plugin}"/> </exec> </target> <target name="version-org.epic.debug" description="Increase plug-in version for org.epic.debug"> <antcall target="incver"> <property name="plugin" value="org.epic.debug"/> </antcall> </target> <target name="version-org.epic.doc" description="Increase plug-in version for org.epic.doc"> <antcall target="incver"> <property name="plugin" value="org.epic.doc"/> </antcall> </target> <target name="version-org.epic.perleditor" description="Increase plug-in version for org.epic.perleditor"> <property name="plugin" value="org.epic.perleditor"/> <antcall target="incver"/> </target> <target name="version-org.epic.regexp" description="Increase plug-in version for org.epic.regexp"> <property name="plugin" value="org.epic.regexp"/> <antcall target="incver"/> </target> <target name="version-feature" description="Increase feature version for EPIC"> <exec executable="perl"> <arg value="update_feature_ver.pl"/> <arg value="${workspace.path}/org.epic.feature.main"/> <arg value="${site.path}"/> </exec> </target> <target name="build-feature" depends="check-env"> <delete> <fileset dir="${workspace.path}"> <include name="org.epic.feature.main/org.epic.feature.main_*.jar"/> </fileset> </delete> <ant inheritall="yes" antfile="${workspace.path}/org.epic.feature.main/build.xml" dir="${workspace.path}/org.epic.feature.main" target="clean" /> <ant inheritall="yes" antfile="${workspace.path}/org.epic.feature.main/build.xml" dir="${workspace.path}/org.epic.feature.main" target="build.update.jar" /> </target> <target name="build-site" depends="check-env"> <copy todir="${site.path}/features" overwrite="false"> <fileset dir="${workspace.path}/org.epic.feature.main"> <include name="org.epic.feature.main_*.jar"/> </fileset> </copy> <copy todir="${site.path}/plugins" overwrite="false"> <fileset dir="${workspace.path}/org.epic.debug"> <include name="org.epic.debug_*.jar"/> </fileset> </copy> <copy todir="${site.path}/plugins" overwrite="false"> <fileset dir="${workspace.path}/org.epic.doc"> <include name="org.epic.doc_*.jar"/> </fileset> </copy> <copy todir="${site.path}/plugins" overwrite="false"> <fileset dir="${workspace.path}/org.epic.perleditor"> <include name="org.epic.perleditor_*.jar"/> </fileset> </copy> <copy todir="${site.path}/plugins" overwrite="false"> <fileset dir="${workspace.path}/org.epic.regexp"> <include name="org.epic.regexp_*.jar"/> </fileset> </copy> </target> <target name="release" description="Rebuild plugins, feature, update site" depends="build-feature,build-site"> </target> </project> --- NEW FILE: update_feature_ver.pl --- #!/usr/bin/perl # # Increases the minor (rightmost) version number of the EPIC feature by 1. # This is achieved by updating feature.xml and build.xml to reflect the change. # Moreover, an entry for the feature is inserted into site.xml. # # Usage: $0 <path to feature directory> <path to update site directory> use strict; use warnings; my $feature_dir = $ARGV[0]; my $site_dir = $ARGV[1]; if (!defined($feature_dir) || !(-d $feature_dir)) { print STDERR "$0: Specify the path to the feature directory as the first argument.\n"; exit(1); } if (!defined($site_dir) || !(-d $site_dir)) { print STDERR "$0: Specify the path to the update site directory as the second argument.\n"; exit(1); } my $current_ver = get_current_version(); my $next_ver = update_version($current_ver, 1); my $feature_path = "$feature_dir/feature.xml"; my $feature = read_file($feature_path); $feature =~ s/version="$current_ver"/version="$next_ver"/s; open(FL, ">$feature_path") || die "could not open $feature_path: $!"; print FL $feature; close(FL); my $build_path = "$feature_dir/build.xml"; my $build = read_file($build_path); $build =~ s/selfVersion="$current_ver"/selfVersion="$next_ver"/gs; $build =~ s/_$current_ver/_$next_ver/gs; open(FL, ">$build_path") || die "could not open $build_path: $!"; print FL $build; close(FL); my $site_path = "$site_dir/site.xml"; my $site = read_file($site_path); my $entry = <<EOT; <feature url="features/org.epic.feature.main_$next_ver.jar" id="org.epic.feature.main" version="$next_ver"> <category name="EPIC"/> </feature> EOT $entry =~ s/\s*$//; $site =~ s/(\s*<category-def)/$entry$1/; open(FL, ">$site_path") || die "could not open $site_path: $!"; print FL $site; close(FL); sub get_current_version { my $content = read_file("$feature_dir/feature.xml"); my $version; if ($content =~ m/version\s*=\s*"(\d+\.\d+\.\d+)"/s) { $version = $1; } if (!defined($version)) { die "Feature version missing in feature.xml"; } return $version; } sub read_file { my $path = shift; my $text = ''; open(FL, "<$path") || die "could not open $path: $!"; while (<FL>) { $text .= $_; } close(FL); return $text; } sub update_version { my $version = shift; my $delta = shift; $version =~ m/(\d+\.\d+\.)(\d+)/; my $major = $1; my $minor = $2; $minor += $delta; return "$major$minor"; } |