Skip to content

Instantly share code, notes, and snippets.

@marcprux
Created July 9, 2014 19:17
Show Gist options
  • Save marcprux/181ec8251943dd57b0af to your computer and use it in GitHub Desktop.
Save marcprux/181ec8251943dd57b0af to your computer and use it in GitHub Desktop.
#!/bin/bash -e
GITBASE="[email protected]:mprudhom" # repository to clone
GITBRANCH="packagereorg" # branch name to place the rename in
test -d incubator-optiq || git clone ${GITBASE}/incubator-optiq.git
# clean out local repository to make sure we aren't referencing stale jars
# rmtrash ~/.m2/repository/net/hydromatic ~/.m2/repository/org/apache/optiq
cd incubator-optiq
BASEDIR=`pwd`
# clobber all outstanding changes
git stash save
git remote add apache https://git-wip-us.apache.org/repos/asf/incubator-optiq.git || echo "Remote already added"
# git fetch apache
# git pull origin
git checkout master
git branch -D ${GITBRANCH} || echo "No branch to delete"
git checkout -- .
git checkout -b ${GITBRANCH}
# clean up old builds
rm -rf */target
# add new remote modules
for module in linq4j csv
do
rm -rf ${module}
git subtree add --prefix=${module} ${GITBASE}/incubator-optiq-${module}.git master
done
# echo foo >> pom.xml
# remove the external linq4j dependency from the master pom
perl -0pi -e "s;<dependency>\s*<groupId>net.hydromatic</groupId>\s*<artifactId>linq4j</artifactId>\s*<version>0.4</version>\s*</dependency>\s*;;gs" pom.xml
# add the parent pom to the new linq4j and csv poms
for file in linq4j/pom.xml csv/pom.xml
do
perl -0pi -e "s;<modelVersion>4.0.0</modelVersion>;<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>net.hydromatic</groupId>
<artifactId>optiq-parent</artifactId>
<version>0.9-SNAPSHOT</version>
</parent>;g" ${file}
done
# add linq4j as a submodule
perl -0pi -e "s;<module>avatica</module>\s*<module>core</module>;<module>avatica</module>\n <module>linq4j</module>\n <module>core</module>;gs" pom.xml
# update linq4j's junit to be in sync with the other modules
perl -0pi -e "s;<artifactId>junit</artifactId>\s*<version>(.*?)</version>;<artifactId>junit</artifactId>\n <version>4.11</version>;gs" linq4j/pom.xml
# fix linq4j's artifact name to be the same optiq- prefix
perl -0pi -e "s;<artifactId>linq4j</artifactId>;<artifactId>optiq-linq4j</artifactId>;gs" linq4j/pom.xml
perl -0pi -e "s;<name>linq4j</name>;<name>optiq-linq4j</name>;gs" linq4j/pom.xml
# update linq4j's version to be the same as the rest
perl -0pi -e "s;<version>0.5-SNAPSHOT</version>;<version>0.9-SNAPSHOT</version>;gs" linq4j/pom.xml
# add csv as a submodule
perl -0pi -e "s;<module>plus</module>\s*<module>spark</module>;<module>plus</module>\n <module>csv</module>\n <module>spark</module>;gs" pom.xml
# core relies on linq4j
perl -0pi -e "s;<dependencies>
<dependency>
<groupId>net.hydromatic</groupId>
<artifactId>optiq-avatica</artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
</dependencies>
;<dependencies>
<dependency>
<groupId>net.hydromatic</groupId>
<artifactId>optiq-avatica</artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>net.hydromatic</groupId>
<artifactId>optiq-linq4j</artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
</dependencies>
;g" core/pom.xml
# fix generated resource name
perl -0pi -e "s;<packageName>org.eigenbase.resource</packageName>;<packageName>org.apache.optiq.runtime</packageName>;gs" core/pom.xml
# fix generated sql parser reference
perl -0pi -e "s;org.eigenbase.sql.parser.impl;org.apache.optiq.sql.parser.impl;gs" core/pom.xml core/src/main/codegen/config.fmpp pom.xml
# remove some package files that are going to be merged in to existing packages
git rm core/src/main/java/net/hydromatic/optiq/rules/java/package-info.java
git rm core/src/main/java/net/hydromatic/optiq/rules/package-info.java
git rm core/src/main/java/org/eigenbase/runtime/package-info.java
git rm core/src/main/java/org/eigenbase/resource/package-info.java
git rm core/src/main/java/org/eigenbase/util/package-info.java
git rm core/src/main/java/org/eigenbase/util14/package-info.java
git rm core/src/test/java/org/eigenbase/test/package-info.java
# source->dest folder renames; order is important for git mv!
for srcdst in \
'net/hydromatic/optiq/impl/java|org/apache/optiq/impl/enumerable' \
'net/hydromatic/optiq/rules|org/apache/optiq/impl/enumerable' \
'net/hydromatic/optiq/impl|org/apache/optiq/impl' \
'org/eigenbase/runtime|org/apache/optiq/runtime' \
'net/hydromatic/optiq/runtime|org/apache/optiq/runtime' \
'org/eigenbase/rel|org/apache/optiq/rel' \
'org/eigenbase/reltype|org/apache/optiq/rel/type' \
'org/eigenbase/resource|org/apache/optiq/runtime' \
'org/eigenbase/util14|org/apache/optiq/util' \
'org/eigenbase/util|org/apache/optiq/util' \
'net/hydromatic/optiq/util|org/apache/optiq/util' \
'net/hydromatic/avatica|org/apache/optiq/avatica' \
'net/hydromatic/linq4j/expressions|org/apache/optiq/linq4j/tree' \
'net/hydromatic/linq4j/function|org/apache/optiq/linq4j/function' \
'net/hydromatic/linq4j|org/apache/optiq/linq4j' \
'net/hydromatic/optiq/test|org/apache/optiq/test' \
'org/eigenbase/test|org/apache/optiq/test' \
'org/eigenbase|org/apache/optiq' \
'net/hydromatic/optiq|org/apache/optiq' \
'net/hydromatic|org/apache/optiq'
do
SRC=`echo "${srcdst}" | cut -f 1 -d '|'`
DST=`echo "${srcdst}" | cut -f 2 -d '|'`
# replace all package names
SRCPKG=`echo "${SRC}" | sed 's;/;\\\.;g'`
DSTPKG=`echo "${DST}" | sed 's;/;.;g'`
echo "Replacing package '${SRCPKG}' with '${DSTPKG}' in ${srcdir}..."
ALLFILES=`find . -type f -name '*.java' -o -name '*.jj' -o -name '*.json'`
perl -pi -e "s;${SRCPKG};${DSTPKG};gs" ${ALLFILES}
# replace direct path references in poms
perl -pi -e "s;${SRC};${DST};gs" pom.xml */pom.xml
for javadir in */src/*/java */src/*/resources
do
SRCDIR=${javadir}/${SRC}
DSTDIR=${javadir}/${DST}
# prune empty subdirs (so the git mv doesn't fail on folder overwrite)
for level in 1 2 3 4
do
find ${SRCDIR} -type d -empty -exec rmdir {} \; &> /dev/null || true
find ${DSTDIR} -type d -empty -exec rmdir {} \; &> /dev/null || true
done
if [ -d ${SRCDIR} ] && [ -n "$(ls -A ${SRCDIR})" ]
then
echo "Moving source: ${SRCDIR} ${DSTDIR}"
# make sure parent dir exists
mkdir -p ${DSTDIR}
git mv -v ${SRCDIR}/* ${DSTDIR}/
fi
done
done
echo "Finishing up..."
cd ${BASEDIR}
# undo some net.hydromatic.* name changes that are not actually in optiq
JAVAFILES=`find . -type f -name '*.java'`
perl -pi -e "s;org\.apache\.optiq\.util\.property;org.eigenbase.util.property;gs" ${JAVAFILES}
perl -pi -e "s;org\.apache\.optiq\.tpcds;net.hydromatic.tpcds;gs" ${JAVAFILES}
git mv core/src/main/resources/version/net-hydromatic-optiq-jdbc.properties core/src/main/resources/version/org-apache-optiq-jdbc.properties
# fix the driver name
perl -pi -e "s;net.hydromatic.optiq.jdbc.Driver;org.apache.optiq.jdbc.Driver;g" core/src/main/resources/META-INF/services/java.sql.Driver README.md
# fix group ids in the poms...
perl -pi -e "s;<groupId>net.hydromatic</groupId>;<groupId>org.apache.optiq</groupId>;gs" pom.xml */pom.xml
# fix the version properties file
perl -pi -e "s;net-hydromatic-optiq-jdbc.properties;org-apache-optiq-jdbc.properties;g" core/src/main/java/org/apache/optiq/jdbc/Driver.java
# ... and restore some external dependencies that should remain net.hydromatic
perl -0pi -e "s;<plugin>
<groupId>org.apache.optiq</groupId>
<artifactId>hydromatic-resource-maven-plugin</artifactId>
;<plugin>
<groupId>net.hydromatic</groupId>
<artifactId>hydromatic-resource-maven-plugin</artifactId>
;g" core/pom.xml
perl -0pi -e "s;<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>tpcds</artifactId>
<version>0.1</version>
<type>jar</type>
</dependency>
;<dependency>
<groupId>net.hydromatic</groupId>
<artifactId>tpcds</artifactId>
<version>0.1</version>
<type>jar</type>
</dependency>
;g" plus/pom.xml
perl -0pi -e "s; <groupId>org.apache.optiq</groupId>
<artifactId>optiq-csv</artifactId>
<version>0.4-SNAPSHOT</version>
<packaging>jar</packaging>
; <groupId>org.apache.optiq</groupId>
<artifactId>optiq-csv</artifactId>
<version>0.9-SNAPSHOT</version>
<packaging>jar</packaging>
;g" csv/pom.xml
perl -0pi -e "s;<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>optiq-core</artifactId>
<version>0.8</version>
</dependency>
<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>optiq-avatica</artifactId>
<version>0.8</version>
</dependency>
<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>linq4j</artifactId>
<version>0.4</version>
</dependency>
;<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>optiq-core</artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>optiq-avatica</artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.optiq</groupId>
<artifactId>optiq-linq4j</artifactId>
<version>0.9-SNAPSHOT</version>
</dependency>
;g" csv/pom.xml
# fix some test case checks for old class names
perl -pi -e "s;net_hydromatic_optiq;org_apache_optiq;g" core/src/test/java/org/apache/optiq/test/JdbcTest.java
perl -pi -e "s;net_hydromatic;org_apache_optiq;g" linq4j/src/test/java/org/apache/optiq/linq4j/test/DeterministicTest.java
perl -pi -e "s;org_apache_optiq_linq4j_test_DeterministicTest_TestDeterministicCa1bc6d17;org_apache_optiq_linq4j_test_DeterministicTest_TestDeterministid6206190;g" linq4j/src/test/java/org/apache/optiq/linq4j/test/DeterministicTest.java
perl -pi -e "s;org_apache_optiq_linq4j_test_DeterministicTest_TestClass_determin1da033bf;org_apache_optiq_linq4j_test_DeterministicTest_TestClass_determ89eb6ea6;g" linq4j/src/test/java/org/apache/optiq/linq4j/test/DeterministicTest.java
# now clear out any obsolete subfolders
find . -type d -empty -exec rmdir {} \; &> /dev/null || true
echo "Building..."
# disable checkstyle failures for now until we can re-sort the package names
mvn clean install -Dcheckstyle.skip=true # -DskipTests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment