| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # This script is used to migrate modules from SVN to Git, |
| # or more precisely to split a svn2git repo to a module repo |
| #!/bin/sh -e |
| |
| # svn2git repo to be split |
| svn2git_repo='maven-doxia-tools' |
| |
| git_src_location="svn2git/${svn2git_repo}" |
| |
| if [ ! -d ${git_src_location} ]; then |
| # clone svn2git repo |
| echo "Cloning source git-svn ${svn2git_repo} ..." |
| git clone https://github.com/apache/${svn2git_repo}.git ${git_src_location} |
| # ensure we don't accidentally overwrite the source repository |
| chmod ugo-w ${git_src_location} |
| echo "Done!" |
| fi |
| |
| mkdir doxia-tools |
| |
| for d in ${git_src_location}/doxia-*; do |
| prefix=`filename $d` |
| repo_name="maven-${prefix}" |
| artifactId="${prefix}" |
| echo "Filtering ${prefix} to ${repo_name}..." |
| if [ ! -d ${repo_name}/.git ]; then |
| # create the initial repo |
| git clone --no-hardlinks ${git_src_location} doxia-tools/${repo_name} |
| pushd doxia-tools/${repo_name} |
| |
| # make sure we don't push to the incorrect repo and also remove make sure |
| # we don't keep references to the remote repo |
| git remote rm origin |
| |
| # rename trunk to master |
| git branch -m trunk master |
| |
| # Remove everything except the path belonging to the module |
| git filter-branch --subdirectory-filter ${prefix}/ |
| |
| # remove unrelated tags |
| for tag in $(git tag); do |
| if [[ $tag != ${artifactId}* ]]; then |
| git tag -d ${tag} > /dev/null |
| fi |
| done |
| |
| # cleanup and compaction |
| git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 git update-ref -d |
| git reflog expire --expire=now --all |
| git repack -Ad |
| git gc --aggressive --prune=now |
| |
| git remote add origin https://gitbox.apache.org/repos/asf/${repo_name}.git |
| |
| popd |
| echo "Complete!" |
| else |
| echo "Already converted" |
| fi |
| done |
| |
| echo "Launch 'git push --set-upstream origin master' once ready" |