summaryrefslogtreecommitdiff
path: root/bin/update-v8.sh
blob: d6f782686ffae5f9d2587b7234d2e042c8dba67a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash

die() {
    echo $*
    exit 1
}

if [ $# -eq 2 ]; then
    repository=$1
    tag=$2
else
    die "usage: $0 [url] [commit]"
fi

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"
}

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

echo "fetching"
git fetch $repository $tag
if [ $? != 0 ]; then
    die "git fetch failed"
fi

rev=`git rev-parse FETCH_HEAD`

srcdir=src/3rdparty/v8
absSrcDir=$PWD/$srcdir
localDiff=

echo "replacing $srcdir"
if [  -d $srcdir ]; then
    git ls-files $srcdir | xargs rm
    git ls-files -z $srcdir | git update-index --force-remove -z --stdin
    lastImport=`git rev-list --max-count=1 HEAD -- $srcdir/ChangeLog`
    changes=`git rev-list --no-merges --reverse $lastImport.. -- $srcdir`
    localDiff=/tmp/v8_patch
    echo -n>$localDiff
    for change in $changes; do
        echo "Saving commit $change"
        git show -p --stat "--pretty=format:%nFrom %H Mon Sep 17 00:00:00 2001%nFrom: %an <%ae>%nDate: %ad%nSubject: %s%n%b%n" $change -- $srcdir >> $localDiff
        echo "-- " >> $localDiff
        echo "1.2.3" >> $localDiff
        echo >> $localDiff
    done
    if [ -s $localDiff ]; then
        echo "Saved locally applied patches to $localDiff"
    else
        localDiff=""
    fi
else
    mkdir -p $srcdir
fi

git read-tree --prefix=$srcdir $rev
git checkout $srcdir

cat >commitlog.txt <<EOT
Updated V8 from $repository to $rev
EOT

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 Qt specific modifications to V8 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