#!/bin/bash die() { echo $* exit 1 } default_tag="javascriptcore-snapshot-02022010" if [ $# -eq 0 ]; then tag="$default_tag" elif [ $# -eq 1 ]; then tag=$1 else die "usage: $0 [commit (defaults to $default_tag)]" fi repository=`git config qtwebkit.url` if [ -z "$repository" ]; then die "error: cannot locate webkit git repository. please run git config --global qtwebkit.url /path-or-url/to/webkit/repo" fi excluded_directories="$excluded_directories JavaScriptCore/Makefile" excluded_directories="$excluded_directories JavaScriptCore/GNUmakefile.am" excluded_directories="$excluded_directories JavaScriptCore/Configurations" excluded_directories="$excluded_directories JavaScriptCore/JavaScriptCore.exp" excluded_directories="$excluded_directories JavaScriptCore/JavaScriptCore.xcodeproj" excluded_directories="$excluded_directories JavaScriptCore/tests" excluded_directories="$excluded_directories JavaScriptCore/API/tests" excluded_directories="$excluded_directories JavaScriptCore/JavaScriptCore.vcproj" excluded_directories="$excluded_directories JavaScriptCore/wtf/wx" excluded_directories="$excluded_directories JavaScriptCore/wtf/gtk" excluded_directories="$excluded_directories JavaScriptCore/wtf/mac" excluded_directories="$excluded_directories JavaScriptCore/wtf/win" excluded_directories="$excluded_directories JavaScriptCore/wtf/chromium" excluded_directories="$excluded_directories JavaScriptCore/wtf/haiku" excluded_directories="$excluded_directories JavaScriptCore/icu" excluded_directories="$excluded_directories JavaScriptCore/qt" excluded_directories="$excluded_directories JavaScriptCore/JavaScriptCore.gyp" files_to_remove="" files_to_remove="$files_to_remove JavaScriptCore/AllInOneFile.cpp" files_to_remove="$files_to_remove JavaScriptCore/JavaScriptCoreSources.bkl" files_to_remove="$files_to_remove JavaScriptCore/jscore.bkl" files_to_remove="$files_to_remove JavaScriptCore/jsc.pro" files_to_remove="$files_to_remove JavaScriptCore/JavaScriptCore.pro" files_to_remove="$files_to_remove JavaScriptCore/DerivedSources.pro" files_to_remove="$files_to_remove JavaScriptCore/create_rvct_stubs" require_clean_work_tree() { # test if working tree is dirty git rev-parse --verify HEAD > /dev/null && git update-index --refresh && git diff-files --quiet && git diff-index --cached --quiet HEAD || die "Working tree is dirty" } which qmake >/dev/null 2>/dev/null if [ "$?" != 0 ]; then die "abort: Could not locate qmake in your PATH" fi test -z "$(git rev-parse --show-cdup)" || { exit=$? echo >&2 "You need to run this command from the toplevel of the working tree." exit $exit } echo "checking working tree" require_clean_work_tree revCount=`git ls-remote $repository | grep $tag | awk '{print $1}' | wc -l` if [ "$revCount" != 1 ]; then die "Cannot parse $tag into a revision. It seems ambiguous". fi rev=`git ls-remote $repository | grep -E "^.+$tag$" | awk '{print $1}'` tarball=`mktemp /tmp/webkit-snapshot.tar.XXXXXX` || exit 1 echo "creating $tarball" echo "archiving webkit from $repository $tag ( $rev )" git archive --remote=$repository $rev JavaScriptCore WebKit.pri > $tarball || exit 1 echo "removing unwanted files and directories" for dir in $excluded_directories; do echo " removing $dir" tar --delete --file=$tarball $dir done for item in $exclude_with_exceptions_list; do dir=`echo $item | awk -F : '{print $1}'` include=`echo $item | awk -F : '{print $2}'` echo " removing $dir except $include" files=`tar --list --file=$tarball $dir | grep -v -E "^$dir\$" | grep -v $include` tar --delete --file=$tarball $files done for file in $files_to_remove; do echo " removing $file" tar --delete --file=$tarball $file done echo "done!" srcdir=src/3rdparty/javascriptcore absSrcDir=$PWD/$srcdir localDiff= lastImportRevison= echo "replacing $srcdir" if [ -d $srcdir ]; then git ls-files $srcdir | xargs rm git ls-files -z src/3rdparty/javascriptcore | git update-index --force-remove -z --stdin else mkdir -p $srcdir fi (cd $srcdir && tar xf $tarball) git add $srcdir echo "generating extra sources" ( for proj in JavaScriptCore; do cd $absSrcDir/$proj && rm -rf tmp && mkdir tmp && cd tmp && mkdir -p ../generated && qmake -o Makefile CONFIG-=QTDIR_build QT_CONFIG+=phonon GENERATED_SOURCES_DIR=`pwd`/../generated OUTPUT_DIR=`pwd` ../$proj.pro && make generated_files && perl -pi -e "s,$absSrcDir/,,g" ../generated/*.cpp ../generated/*.h && git add ../generated && cd .. && rm -rf tmp && cd .. done ) rm -rf $srcdir/WebKitBuild cat >$srcdir/VERSION <commitlog.txt <>commitlog.txt echo "Changes in WebKit/qt since the last update:" >>commitlog.txt echo >>commitlog.txt git --git-dir=$repository/.git diff $lastImportRevison $rev -- WebKit/qt/ChangeLog | sed -n -e "s,^\+\(.*\),\1,p" >>commitlog.txt fi echo "Changes:" echo git --no-pager diff --name-status --cached $srcdir echo echo "Wrote commitlog.txt. Use with" echo echo " git commit -e -F commitlog.txt" echo echo "to commit your changes" if [ -n "$localDiff" ]; then echo echo "The changes that were locally stored in Perforce are now stored as a git patch in $localDiff" echo "You may want to appy them with" echo echo " git am -3 $localDiff" echo fi